這是我遇到的一個非常棘手的問題,它正在抨擊我的內存管理,這是設置:我有一個具有以下列設置的數據框:Unique1 Unique2 Unique3 d_1 d_2 d_3..... d_2000 A B C 1 4 0 100我想刪除 d_1...d_2000 列,而是為每個條目設置一個唯一的行:Unique1 Unique2 Unique3 d_index d_value A B C d_1 1 A B C d_2 4 A B C d_3 0 . . . A B C d_2000 100下面的代碼給了我一個 2 dim 系列,它可以被壓縮回一個數據幀,但是因為我需要使用一些工作變量,所以它在 linux 上很快用完了 32gb 的 ram(在 windows env 上工作,但速度很慢) :def convert_timeseries_to_rows(row): d_idx = 1 rows_to_return = [] for day_count in row[6:]: ### d columns start from 6 new = list(row[:6]) ### keep first 6 columns day_string = "d_"+str(d_idx) new.append(day_string) new.append(day_count) rows_to_return.append(new) d_idx = d_idx + 1 return rows_to_return ### return all rows generated2_dim_series = df.apply(convert_timeseries_to_rows, axis=1)data = []columns = ['unique1', "unique2"..., 'date_index', 'units']for each in 2_dim_series : for row in each: data.append(dict(zip(columns,row)))data = pd.DataFrame(data)data.to_csv('save_to_disk.csv')任何專業人士都可以想到更好的方法來做到這一點(在 python 中)嗎?謝謝!示例輸入:Unique1 Unique2 Unique3 d_1 d_2 d_3 A B C 1 4 0 D E F 5 9 12 示例輸出:Unique1 Unique2 Unique3 d_index d_value A B C d_1 1 A B C d_2 4 A B C d_3 0 D E F d_1 5 D E F d_2 9 D E F d_3 12
2 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
我像這樣重新創建了數據框:
import pandas as pd
n = 2000
df = pd.DataFrame(columns=['Unique' + str(i) for i in range(1,4)]
+ ['d_' + str(i) for i in range(n)],
data= [['A','B','C'] + np.random.randint(0,100,n).astype(str).tolist()],
index = [0])
然后確定您正在使用的列:
d_cols = df.columns[df.columns.str.contains('d_')]
u_cols = df.columns[df.columns.str.contains('Unique')]
然后生成第二個數據幀:
df2 = pd.DataFrame({'d_index':d_cols,
'd_value': df[d_cols].values.flatten()})
for col in u_cols:
df2[col] = df[col][0]
添加回答
舉報
0/150
提交
取消