我正在尝试将numpy.darray附加到数据框,但收效甚微。 数据帧称为user2,numpy.darray称为CallTime。
我试过了:
user2["CallTime"] = CallTime.values
但是我收到一条错误消息:
Traceback (most recent call last):
File "<ipython-input-53-fa327550a3e0>", line 1, in <module>
user2["CallTime"] = CallTime.values
AttributeError: 'numpy.ndarray' object has no attribute 'values'
然后我尝试了:
user2["CallTime"] = user2.assign(CallTime = CallTime.values)
但我再次收到与上面相同的错误消息。
我也尝试使用merge命令,但由于某种原因,虽然我已经导入了pandas,但Python无法识别它。在下面的示例中,CallTime是一个数据帧:
user3 = merge(user2, CallTime)
错误讯息:
Traceback (most recent call last):
File "<ipython-input-56-0ebf65759df3>", line 1, in <module>
user3 = merge(user2, CallTime)
NameError: name 'merge' is not defined
有什么想法吗?
谢谢!
答案 0 :(得分:0)
pandas DataFrame
是一个二维数据结构,DataFrame
的每一列都是一维Series
。因此,如果要向DataFrame添加一列,则必须先将其转换为Series
。 np.ndarray是一个多维数据结构。从您的代码中,我相信np.ndarray CallTime
的形状应为nx1
(n
行和1
colmun),并且很容易将其转换为系列。这是一个例子:
df = DataFrame(np.random.rand(5,2), columns=['A', 'B'])
这会创建一个数据框df
,其中包含两列“A”,“B”和5
行。
CallTime = np.random.rand(5,1)
假设这是您的np.ndarray
数据CallTime
df['C'] = pd.Series(CallTime[:, 0])
这会向df
添加一个新列。此处CallTime[:,0]
用于选择CallTime
的第一列,因此,如果您要使用np.ndarray
中的不同列,请更改索引。
请确保df
和CallTime
的行数相等。
希望这会有所帮助。
答案 1 :(得分:0)
我认为只提供文档,我会尝试提供一个示例:
import numpy as np
import pandas as pd
data = {'A': [2010, 2011, 2012],
'B': ['Bears', 'Bears', 'Bears'],
'C': [11, 8, 10],
'D': [5, 8, 6]}
user2 = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'])
#creating the array what will append to pandas dataframe user2
CallTime = np.array([1, 2, 3])
#convert to list the ndarray array CallTime, if you your CallTime is a matrix than after converting to list you can iterate or you can convert into dataframe and just append column required or just join the dataframe.
user2.loc[:,'CallTime'] = CallTime.tolist()
print(user2)
我认为这个会有所帮助,如果需要找出我们需要列表的原因以及怎么做,请查看numpy.ndarray.tolist文档,这里也是示例如何在需要时从numpy创建数据帧{{3 }}
答案 2 :(得分:0)
这是一个简单的解决方案。
user2["CallTime"] = CallTime
这里的问题是CallTime是一个数组,您不能使用.values。由于.values用于将数据帧转换为数组。例如,
df = DataFrame(np.random.rand(10,2), columns=['A', 'B'])
# The followings are correct
df.values
df['A'].values
df['B'].values