2017-10-30 12 views
-1

私は25の2列のデータフレームを持っています。列0を1列に分割して3列目にしたい、つまり3列目を25データフレームに追加します。python pandasでループ内のデータフレームにアクションを実行する方法

私の問題は、ループ内のデータフレームを正しく識別していると思います。これまでのところ、私は試みました:

for country in countries.index: 
    data = [country].iloc[:, 0]/[country].iloc[:,1] 
    [country].Ratio = [country].data 

ここでcountries.indexはデータフレームの国(インデックス)のリストです。しかし、これはエラーを与える:

AttributeError: 'list' object has no attribute 'iloc'

私はキーの前に)(VARSを含むいくつかの上記のバリエーションだけでなく、を試してみましたが、私は解決できないようです。

各データフレームの名前はcountries.index

答えて

0

にそれぞれの国の名前と一致するあなたは値thorughループする必要はありません。データフレームをループする必要がある場合は、データフレームのリストを作成し、pandasのapplyメソッドを直接使用することも、データフレームの列を直接分割することもできます。

countries = [country1, country2, country3] # list of dataframes 
for country in countries: 
    country['ratio'] = country['data1']/country['data2'] 

これで、リスト内の各データフレームに新しいratio列が追加されます。

+0

しかし、これを25個のデータフレームのそれぞれに対して実行したい場合、私はそれを実行するのではなく、それぞれを繰り返すことをお勧めしますne by one –

+0

データフレームのリストを作成し、リストをループすることができます。しかし正しい方法は、ベクトル単位で適用することです。 –

0

エラーは、データフレームで操作していないことを示しています。また、構文が正しくありません。

def add_ratio(df): 
    df['ratio'] = df.iloc[:,0]/df.iloc[:,1] 
    return df 

また、質問に基づいて、25個のエントリがあり、25個の別々のデータフレームではないというデータフレームがあるように思えます。

あなたは「国」という名前のデータフレームのリストを持っている場合:あなたはそれに25カ国で命名国のデータフレームについて話している場合

または

for country in countries: 
    country = add_ratio(country) 

countries['ratio'] = countries.iloc[:,0]/countries.iloc[:,1] 
+0

こんにちは、あなたのシナリオ "あなたが"国 "という名前のデータフレームのリストを持っていた場合、私の状況です。これはうまく見えますが、" AttributeError: 'str'オブジェクトの属性に 'iloc'これは行番号2に反しているようです。 –

+0

つまり、データフレームのリストがなく、文字列のリストがあります。 – mauve

+0

問題のあるコードをもっと共有してください。どのようにDataFrameを始めるのですか? – mauve

関連する問題