我有一個數據幀(從CSV文件導出)用100M左右的條目,看起來像這樣:重新分配的條目爲多行了巨大的熊貓數據幀
df1:
var1 var2
0 1 2
1 2 1
2 1 {3,4,5}
3 5 6
4 {4,5,6,7} 8
我需要將其轉換成新數據幀,其中(每行)在括號每個元件需要與在另一列中的元件,即,相關聯的,
df2:
var1 var2
0 1 2
1 2 1
2 1 3
3 1 4
4 1 5
5 5 6
6 4 8
7 5 8
8 6 8
9 7 8
每個元素是一個字符串,即使支架條目本身。請注意,支撐元素可以在任一列中。有誰知道我如何有效地實現這個約100M條目的數據集?提前致謝。
Python的例子:
import pandas as pd
df1 = pd.DataFrame([{'var1': '1', 'var2': '2'},
{'var1': '2', 'var2': '1'},
{'var1': '1', 'var2': '{3,4,5}'},
{'var1': '5', 'var2': '6'},
{'var1': '{4,5,6,7}', 'var2': '8'}])
df2 = pd.DataFrame([{'var1': '1', 'var2': '2'},
{'var1': '2', 'var2': '1'},
{'var1': '1', 'var2': '3'},
{'var1': '1', 'var2': '4'},
{'var1': '1', 'var2': '5'},
{'var1': '5', 'var2': '6'},
{'var1': '4', 'var2': '8'},
{'var1': '5', 'var2': '8'},
{'var1': '6', 'var2': '8'},
{'var1': '7', 'var2': '8'}])
我迄今所做的這一點,但它是緩慢的,以其他的數據幀。
# Put row with braces in the second column
def swap_cols(row):
if '{' in row[0]:
return (row[1], row[0])
return row
# Convert the braces into a list
def parse_str(s):
if '{' in s:
s = s[1:-1]
return s.split(',')
return [s]
df3 = df1.apply(swap_cols, axis=1)
df3.var2 = df3.var2.apply(parse_str)
# Show that it works
for ridx, row in df3.iterrows():
for ele in row.var2:
print row.var1, ele
我加了numpy的標籤,這可能會吸引有趣的答案:) – IanS
所以沒有答案是有幫助的嗎?我有興趣看看現實生活中的比較。 – IanS