这是为元组创建DataFrame的正确方法吗?(假设元组是在代码片段内创建的)
import pandas as pd
import numpy as np
import random
row = ['a','b','c']
col = ['A','B','C','D']
# use numpy for creating a ZEROS matrix
st = np.zeros((len(row),len(col)))
df2 = pd.DataFrame(st, index=row, columns=col)
# CONVERT each cell to an OBJECT for inserting tuples
for c in col:
df2[c] = df2[c].astype(object)
print df2
for i in row:
for j in col:
df2.set_value(i, j, (i+j, np.round(random.uniform(0, 1), 4)))
print df2
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我首先创建了一个zeros(3,4)numpy,然后在Pandas中使每个单元格成为OBJECT类型,这样我就可以插入元组了.这是正确的做法,还是有更好的ADD/RETRIVE元组到矩阵的解决方案?
结果很好:
A B C D
a 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的数据框:
import pandas as pd
d = pd.DataFrame({'a':[[1], [2], [3]], 'b': [[4], [5], [6]]})
print d
a b
0 [1] [4]
1 [2] [5]
2 [3] [6]
Run Code Online (Sandbox Code Playgroud)
我想得到
combined
0 [1, 4]
1 [2, 5]
2 [3, 6]
Run Code Online (Sandbox Code Playgroud)
我使用了以下
d['combined'] = d.apply(lambda row: row.a + row.b, axis=1)
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
ValueError: Wrong number of items passed 2, placement implies 1
Run Code Online (Sandbox Code Playgroud)
为什么会
d['combined'] = d.apply(lambda row: row.a[0] + row.b[0], axis=1)
Run Code Online (Sandbox Code Playgroud)
会工作(虽然不是我需要的),但是我上面的代码给出了错误?
更新:
实际上我的原始代码更像是这样的:
d = pd.DataFrame({'a':[[1, 2], [2, 3], [3, 4]], 'b': [[4, …Run Code Online (Sandbox Code Playgroud)