[解決済み] pandas dataframeの行をforループで追加するには?
質問
以下のようなforループがあります。
for i in links:
data = urllib2.urlopen(str(i)).read()
data = json.loads(data)
data = pd.DataFrame(data.items())
data = data.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
このようにして作成された各データフレームは、ほとんどの列が他のものと共通していますが、すべての列が共通というわけではありません。さらに、それらはすべて1行だけを持っています。私が必要とするのは、forループによって生成された各データフレームから、すべての異なる列と各行をデータフレームに追加することです。
私はpandas concatenateまたは同様のものを試しましたが、何も動作しないようです。何かアイデアはありますか?ありがとうございます。
どのように解決するのですか?
あなたのデータがこのようなものだったとします。
import pandas as pd
import numpy as np
np.random.seed(2015)
df = pd.DataFrame([])
for i in range(5):
data = dict(zip(np.random.choice(10, replace=False, size=5),
np.random.randint(10, size=5)))
data = pd.DataFrame(data.items())
data = data.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
df = df.append(data)
print('{}\n'.format(df))
# 0 0 1 2 3 4 5 6 7 8 9
# 1 6 NaN NaN 8 5 NaN NaN 7 0 NaN
# 1 NaN 9 6 NaN 2 NaN 1 NaN NaN 2
# 1 NaN 2 2 1 2 NaN 1 NaN NaN NaN
# 1 6 NaN 6 NaN 4 4 0 NaN NaN NaN
# 1 NaN 9 NaN 9 NaN 7 1 9 NaN NaN
であれば、次のように置き換えることができる。
np.random.seed(2015)
data = []
for i in range(5):
data.append(dict(zip(np.random.choice(10, replace=False, size=5),
np.random.randint(10, size=5))))
df = pd.DataFrame(data)
print(df)
つまり、各行ごとに新しいDataFrameを作成するのではなく、すべてのデータをdictsのリストに集めてから、DataFrameを呼び出します。その代わり、全てのデータをdictsのリストに集め、その中から
df = pd.DataFrame(data)
を最後に一度だけ呼び出します。
の各呼び出しは
df.append
を呼び出すたびに、1行増えた新しいDataFrameのための領域を確保し、元のDataFrameから新しいDataFrameにすべてのデータをコピーし、さらに新しい行にデータをコピーする必要があります。このような割り当てとコピーにより
df.append
をループで呼び出すことは非常に非効率的です。コピーにかかる時間的コストは
は二次関数的に増大します。
のコピーにかかる時間は、行の数に対して二次関数的に増加します。call-DataFrame-onceのコードは書きやすいだけでなく、性能もずっと良くなります。コピーにかかる時間は行の数に対して直線的に増加します。
関連
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 空のPandas DataFrameを作成し、それを埋める?
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】pandasでカラムの種類を変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 辞書のリストをpandasのDataFrameに変換する
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?