私のプロジェクトでは、米国のすべての州のデータを含むcsvファイルを読み込んでいます。私の機能は、各州の情報に関する操作を実行する必要があるため、これらのそれぞれを個別のDataframeに変換します。複数のデータフレームを反復処理して、それぞれの列をPythonで選択するにはどうすればよいですか?
def RanktoDF(csvFile):
df = pd.read_csv(csvFile)
df = df[pd.notnull(df['Index'])] # drop all null values
df = df[df.Index != 'Index'] #Drop all extra headers
df= df.set_index('State') #Set State as index
return df
は、私は私のファイルの一人一人に、この機能を適用し、私の配列から名前でDFを返すことのすべてが完璧に動作
for name , s in zip (glob.glob('*.csv'), varNames):
vars()["Crime" + s] = RanktoDF(name)
varNames。 私の問題は、それぞれの状態データフレームから1つの列で構成されたデータフレームを作成したいということです。
私は自分のデータフレームのリストを反復処理し、列(人口)私は新しいデータフレームにそれを追加したいを選択しようとしている:
dfNewIndex = pd.DataFrame(index=CrimeRank_1980_df.index) # Create new DF with Index
for name in dfList: #dfList is my list of dataframes. See image
newIndex = name['Population']
dfNewIndex.append(newIndex)
#dfNewIndex = pd.concat([dfNewIndex, dfList[name['Population']], axis=1)
私の誤差は常に同じです名前が実際のデータフレームではなく文字列として表示されることを教えてください
TypeError Traceback (most recent call last)
<ipython-input-30-5aa85b0174df> in <module>()
3
4 for name in dfList:
----> 5 newIndex = name['Index']
6 dfNewIndex.append(newIndex)
7 # dfNewIndex = pd.concat([dfNewIndex, dfList[name['Population']], axis=1)
TypeError: string indices must be integers
私のリストは文字列リストではなく、変数/データフレームので、私の質問は、私が望むやり方をするために自分のコードを修正したり、これを行う簡単な方法は何ですか?
私が調べた解決策は、データフレームを連結するためにデータフレームを明示的に入力するところの回答を与えていますが、私は50を持っていますので、少ししか実行できません。どんな助けもありがとう。
dfListのオブジェクトがデータフレーム型であることを確認してください。なぜなら、それは前記データフレームの名前だけであると思われ、エラーは完全に意味をなさないからです。 – Aquiles
この行が正常に動作していることを確認してください: 'df = df [df.Index!= 'Index']#すべての余分なヘッダーをダンプする ' – Alexander
@Alexanderそうです。それは私のCSVファイルの奇妙な3つのテーブルの合併が互いの上に積み重なったことです。彼らは同じヘッダーを持っているので、インデックスの列から「インデックス」を削除することによって、それらの他のヘッダーをすべて削除し、 。あなたの返信ありがとう – DaithiOK