问题描述
我懂了:
columns = ['a','b','c']
data = [1,2,3],[3,4],[4,5,5]
df = pandas.DataFrame({i:pandas.Series(j) for i in columns for j in data})
print(df)
输出:
a b c
0 4 4 4
1 5 5 5
2 5 5 5
我需要:
a b c
0 1 3 4
1 2 4 5
2 3 5
我真的不明白为什么这不起作用。
我知道我正在以正确的方式访问data
中的元素。
有小费吗?
1楼
应该这样做:
import pandas as pd
data = [[1, 2, 3], [3, 4], [4, 5, 5]]
df = pd.DataFrame(data).transpose()
df.columns = columns
输出:
a b c
0 1.0 3.0 4.0
1 2.0 4.0 5.0
2 3.0 NaN 5.0
2楼
当您进入第二个循环时,您正在覆盖值。 您正在做的是:
import pandas
columns = ['a','b','c']
data = [1,2,3],[3,4],[4,5,5]
myDict = {}
for i in columns:
for j in data:
myDict[i]=j
print(pandas.DataFrame(myDict))
这就是为什么您的数据被覆盖的原因。 您要做的显然是:
myDict = {}
for i,key in enumerate(columns):
myDict[key] = data[i]
但是,这将导致:
raise ValueError('arrays must all be same length')
ValueError: arrays must all be same length
有一个很好的解决方案