カラムのセルに複数の値があり、 ';'で区切られたpandasデータフレームがあります。私は、複数の値を(1つのセルで)分割し、分割された値の新しい行を作成しようとしています。以下の例のような何か:Python(Jupyter Notebook):インデックスのエラーの長さに一致しないデータフレームインデックスをコピーするパンダ
> In: df
> Out:
| Year | State | Ingredient | Species |
| 1998 | CA | egg; pork | sp1;sp2 |
私はこのようなルックスを実現しようとしています結果:
> In: df
> Out:
| Year | State | Ingredient | Species |
| 1998 | CA | egg | sp1 |
| 1998 | CA | egg | sp1 |
| 1998 | CA | pork | sp2 |
| 1998 | CA | pork | sp2 |
私はこのようなデータフレームを分割する方法を発見したが、それは一度だけ動作します。私が使用するコードを以下に示す:
sp = df['Species'].str.split(';', expand=True).stack().reset_index(level=1, drop=True)
i = sp.index.get_level_values(0)
df1 = df.loc[i].copy()
df1['Species] = sp.values
Iは、元のデータフレーム(DF)を使用して、最初の「種」カラムでこれを実行すると、それが動作します。
しかし、df1でこのコードをもう一度実行して 'Ingredient'を分割しようとすると、の値の長さがインデックスの長さと一致しないというエラーが表示されます。以下に示すよう:
fd = df1['Ingredient'].str.split(';', expand=True).stack().reset_index(level=1, drop=True)
j = fd.index.get_level_values(0)
df2 = df1.loc[j].copy()
df2['Ingredient'] = fd.values
私はそれは私にそのエラーメッセージを返す理由を見つけるために、多くの臨床試験をした、と私は、実行時にこれがDF2、それダブルス行の数を作成するために、DF1に再び呼び出さことに気づきました/ indexを実行したときdf2 = df1.loc [j] .copy()。したがって、私に必要以上に多くの行を与えてください。しかし、 'df1'を 'df'(元のデータフレーム)に置き換えた場合、このエラーは表示されず、動作します。
解決方法はありますか?あるいはそれを分割する他の方法はありますか?
ありがとうございます。
ps。これは私の初めてのStack Overflowへの投稿です。私はPythonも新しくなっています。フォーマットが悪い場合は申し訳ありません。
お返事ありがとうございます!あなたのコードを試してみましたが、うまく動作しませんでした。私はデータセットが小さかったので、あなたの方法はあなたのために働いたと思います。私は大規模で複雑なデータセットを持っているので、それが私のためにはうまくいかなかったのです。私の思考過程を本当に助けてくれた「編集」アドバイスをありがとう。私はあなたの方法から多くを学んだ。私が解決策を見つけたら、私はあなたに知らせるでしょう! – Dahlia
元のコードの修正は機能しますか?以前はそれが不適切な機能の問題だったと私は理解していますが、今はパフォーマンスに関する問題ですか? –
素晴らしい、幸運! –