複数のデータセットが行単位で区切られたファイルがあります。私は、各データフレームは、国に対応する複数のデータフレームにファイル全体を読み込むためにパンダを使用したいパンダを使用して複数のデータセットを1つのファイルから読み込むにはどうすればよいですか?
country1
0.9
1.3
2.9
1.1
...
country2
4.1
3.1
0.2
...
:それはのようになります。これを行う簡単な方法はありますか?各国のエントリ数は異なります。
複数のデータセットが行単位で区切られたファイルがあります。私は、各データフレームは、国に対応する複数のデータフレームにファイル全体を読み込むためにパンダを使用したいパンダを使用して複数のデータセットを1つのファイルから読み込むにはどうすればよいですか?
country1
0.9
1.3
2.9
1.1
...
country2
4.1
3.1
0.2
...
:それはのようになります。これを行う簡単な方法はありますか?各国のエントリ数は異なります。
mask
をto_numeric
とerrors='coerce'
で作成することができます。したがって、NaN
は列名です。その後isnull
でそれらを見つけるとcumsum
でグループを作成します。
import pandas as pd
import io
temp=u"""country1
0.9
1.3
2.9
1.1
country2
4.1
3.1
0.2"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), index_col=None, header=None)
print (df)
0
0 country1
1 0.9
2 1.3
3 2.9
4 1.1
5 country2
6 4.1
7 3.1
8 0.2
mask = pd.to_numeric(df.iloc[:,0], errors='coerce').isnull().cumsum()
print (mask)
0 1
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
Name: 0, dtype: int32
最終使用にlist comprehension
をdataframes
のリストについて:
dfs = [g[1:].rename(columns={0:g.iloc[0].values[0]}) for i, g in df.groupby(mask)]
print (dfs)
print (dfs[0])
country1
1 0.9
2 1.3
3 2.9
4 1.1
print (dfs[1])
country2
6 4.1
7 3.1
8 0.2
必要reset index
場合:
dfs = [g[1:].rename(columns={0:g.iloc[0].values[0]}).reset_index(drop=True) for i, g in df.groupby(mask)]
print (dfs)
print (dfs[0])
country1
0 0.9
1 1.3
2 2.9
3 1.1
print (dfs[1])
country2
0 4.1
1 3.1
2 0.2
パンダはcsvやjsonのような標準的なファイルフォーマットをサポートしていますが、これはそれらの1つではありません。手作業でファイルを再フォーマットすることは時間の無駄だと思っており、with open(...) as f:
とf.readlines()
をpythonオブジェクトに使用して自分でファイルを解析することをお勧めします。
あなたがいることをやったと言うと、フォーマットがdata
のように見え、その後、from_dict()
は動作するはずです:
data = { "countryName1": [0.9, 1.3, ...], "countryName2": [...]}
df = pd.DataFrame.from_dict(data)
このソリューション@ArturJは関係なく、国が数値的に順序付けられているかどうかの動作するはずです。 jezraelは、 'is_numeric'を使って** not **数値のエントリを識別し、サブデータフレームの終わりと終わりを識別できるようにします。これは、データそのものが数値でない場合、または国名が「5.3」の場合にのみ問題になります。ボトムライン、あなたは良いことをする必要があります。 – piRSquared
@ArturJまた、これがあなたの質問に答える場合は、それを答えとして記入してください。フォローアップの質問がある場合は、別の質問をしてください。 – piRSquared