簡體   English   中英

將一列附加到 Pandas 中的數據框

[英]Append a column to a dataframe in Pandas

我試圖將 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)

但我再次收到與上述相同的錯誤消息。

我也嘗試使用合並命令,但由於某種原因,盡管我導入了熊貓,但 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

有任何想法嗎?

謝謝!

pandas DataFrame是一個二維的數據結構,一個DataFrame每一列都是一個一維的Series 因此,如果要向 DataFrame 添加一列,則必須先將其轉換為Series np.ndarray 是一種多維數據結構。 從您的代碼中,我相信 np.ndarray CallTime的形狀應該是nx1n行和1列),並且很容易將其轉換為系列。 下面是一個例子:

df = DataFrame(np.random.rand(5,2), columns=['A', 'B'])

這將創建一個具有兩列“A”和“B”以及5行的數據框df

CallTime = np.random.rand(5,1)

假設這是您的np.ndarray數據CallTime

df['C'] = pd.Series(CallTime[:, 0])

這將向df添加一個新列。 這里CallTime[:,0]用於選擇CallTime第一列,因此如果您想使用與np.ndarray不同的列,請更改索引。

請確保dfCallTime的行數相等。

希望這會有所幫助。

我認為只提供文檔,我將嘗試提供一個示例:

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)

數據框 user2 的結果

我認為這個會有所幫助,如果需要找出我們為什么需要列表以及如何做,還可以查看numpy.ndarray.tolist文檔,這里還有示例如何在需要https://stackoverflow 的情況下從 numpy 創建數據幀。 com/a/35245297/2027457

這是一個簡單的解決方案。

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM