我在pandas中添加列时遇到问题。 我有DataFrame,维度是nxk。在过程中,我需要添加维度为mx1的列,其中m = [1,n],但我不知道m。
当我尝试这样做时:
df['Name column'] = data
# type(data) = list
结果:
AssertionError: Length of values does not match length of index
我可以添加不同长度的列吗?
答案 0 :(得分:35)
如果您使用已接受的答案,则会丢失您的列名称,如接受的答案示例所示,并在documentation中进行了描述(重点已添加):
生成的轴将标记为0,...,n - 1.如果您连接的对象连接轴不具有有意义的索引信息,则此选项非常有用。
列名('Name column'
)看起来对原始海报/原始问题有意义。
要保存列名称,请使用pandas.concat
,但不要 ignore_index
(默认值ignore_index
为false
;所以你可以完全省略那个论点):
import pandas
# Note these columns have 3 rows of values:
original = pandas.DataFrame({
'Age':[10, 12, 13],
'Gender':['M','F','F']})
# Note this column has 4 rows of values:
additional = pandas.DataFrame({
'Name': ['Nate A', 'Jessie A', 'Daniel H', 'John D']
})
new = pandas.concat([original, additional], axis=1)
# Identical:
# new = pandas.concat([original, additional], ignore_index=False, axis=1)
print(new.head())
# Age Gender Name
#0 10 M Nate A
#1 12 F Jessie A
#2 13 F Daniel H
#3 NaN NaN John D
注意John D没有年龄或性别。
答案 1 :(得分:30)
使用concat并传递axis=1
和ignore_index=True
:
In [38]:
import numpy as np
df = pd.DataFrame({'a':np.arange(5)})
df1 = pd.DataFrame({'b':np.arange(4)})
print(df1)
df
b
0 0
1 1
2 2
3 3
Out[38]:
a
0 0
1 1
2 2
3 3
4 4
In [39]:
pd.concat([df,df1], ignore_index=True, axis=1)
Out[39]:
0 1
0 0 0
1 1 1
2 2 2
3 3 3
4 4 NaN
答案 2 :(得分:2)
我们可以将不同大小的列表值添加到DataFrame。
实施例
a = [0,1,2,3]
b = [0,1,2,3,4,5,6,7,8,9]
c = [0,1]
查找所有列表的长度
la,lb,lc = len(a),len(b),len(c)
我知道最大长度是' B'列出并调整A和B列表的大小
a.extend(['']*6)
c.extend(['']*8)
现在所有列表都是相同的长度并创建数据帧
pd.DataFrame({'A':a,'B':b,'C':c})
最终输出
A B C
0 1 0 1
1 2 1
2 3 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
答案 3 :(得分:1)
我遇到了同样的问题,两个不同的数据框,并且没有共同的专栏。我只需要将它们彼此放置在一个csv文件中。
df1 = df1.reset_index()
df2 = df2.reset_index()
df = [df1, df2]
df_final = pd.concat(df, axis=1)
df_final.to_csv(filename, index=False)
这样,您会看到dfs
彼此相邻(按列),每个都有自己的长度。