[英]How to concatenate multiple pandas.DataFrames without running into MemoryError
[英]How to concatenate pandas.DataFrames columns
我有一個稱為raw_df
:
columns = ['force0', 'distance0', 'force1', 'distance1']
raw_data = [{'force0': 1.2, 'distance0': 0.0, 'force1': 0.5, 'distance1': 0.0},
{'force0': 1.3, 'distance0': 0.1, 'force1': 0.6, 'distance1': 0.0},
{'force0': 1.4, 'distance0': 0.2, 'force1': 0.7, 'distance1': 0.3},
{'force0': 1.5, 'distance0': 0.5, 'force1': 0.8, 'distance1': 0.6}]
raw_df = pd.DataFrame(raw_data, columns=columns)
raw_df
看起來像這樣:
force0 distance0 force1 distance1
0 1.2 0.0 0.5 0.0
1 1.3 0.1 0.6 0.0
2 1.4 0.2 0.7 0.3
3 1.5 0.5 0.8 0.6
目前沒有索引,但我希望將distance列合並為一個索引,因此這些列為:
force0 force1
distance
0.0 1.2 0.5
0.0 NaN. 0.6
0.1 1.3 NaN
0.2 1.4 NaN
0.3 NaN 0.7
0.5 1.5 NaN
0.6 NaN 0.8
請注意,在force1中,距離1 = 0.0有2個條目。
索引(距離)不應排序:它們先升后降,而每個測試的原始順序很重要。
斯特凡(Stefan)對我的問題描述得不好的問題發表了一個驚人的答案,但似乎用其他數字填補了所有缺失的力(這會產生誤導,因為在那些測試中沒有針對這些距離的力測量值)。 我使用np.nan
來缺少值,因為我認為這是pandas
所做的。
我認為merge
或join
可能會滿足我的需要,但無法理解文檔 。
也許pandas.DataFrame
不是為此類數據而設計的,我應該改用numpy.genfromtxt
並隨便選擇我需要的列:如果我要選擇pandas.DataFrame
列,我看不出任何好處飛(因為在這種情況下我不使用索引)。
謝謝你的幫助。
如果我理解正確,那么您是從類似於以下情況開始的:
columns = list(sum(list(zip(['Forces{}'.format(i) for i in range(4)], ['Distances{}'.format(i) for i in range(4)])), ()))
df = pd.DataFrame(np.random.randint(1, 11, size=(100, 8)), columns=columns)
Forces0 Distances0 Forces1 Distances1 Forces2 Distances2 Forces3 \
0 3 5 8 3 7 4 2
1 1 4 10 9 9 3 6
2 10 3 1 3 3 7 8
3 2 1 3 6 10 10 10
4 4 2 9 1 3 10 8
Distances3
0 8
1 5
2 3
3 8
4 8
並且您的目標是讓各種Distance
列構成一個index
而相應的Force
columns remain in place. You could
columns remain in place. You could
像這樣堆疊框架:
df.set_index([c for c in df.columns if c.startswith('Force')], inplace=True)
df = df.stack().reset_index(level=-1, drop=True).reset_index().rename(columns={0: 'Distance'})
df.set_index(['Distance'], inplace=True)
要得到:
Forces0 Forces1 Forces2 Forces3
Distance
9 7 4 6 7
9 7 4 6 7
1 7 4 6 7
6 7 4 6 7
5 1 2 3 1
我使用MultiIndex DataFrame解決了問題:
pd.read_csv()
將每個測試讀入單獨的DataFrame中 df = pd.concat(frame_list, keys=test_names)
將DataFrames合並為一個 我沒有在這里寫詳細說明,而是在主題上寫了一個Jupyter筆記本 ,將MultiIndex方法與僅保留標准Python DataFrames列表進行了比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.