我正在做一个ML项目,根据标签预测堆栈溢出时的回答时间。样本数据:
Unnamed: 0 qid i qs qt tags qvc qac aid j as at
0 1 563355 62701.0 0 1235000081 php,error,gd,image-processing 220 2 563372 67183.0 2 1235000501
1 2 563355 62701.0 0 1235000081 php,error,gd,image-processing 220 2 563374 66554.0 0 1235000551
2 3 563356 15842.0 10 1235000140 lisp,scheme,subjective,clojure 1047 16 563358 15842.0 3 1235000177
3 4 563356 15842.0 10 1235000140 lisp,scheme,subjective,clojure 1047 16 563413 893.0 18 1235001545
4 5 563356 15842.0 10 1235000140 lisp,scheme,subjective,clojure 1047 16 563454 11649.0 4 1235002457我被数据清理程序卡住了。我打算创建一个名为“time_taken”的新列,它存储at列和qt列之间的差异。代码:
import pandas as pd
import numpy as np
df = pd.read_csv("answers.csv")
df['time_taken'] = 0
print(type(df.time_taken))
for i in range(0,263541):
val = df.qt[i]
qtval = val.item()
val = df.at[i]
atval = val.item()
df.time_taken[i] = qtval - atval我得到了一个错误:
Traceback (most recent call last):
File "<ipython-input-39-9384be9e5531>", line 1, in <module>
val = df.at[0]
File "D:\Softwares\Anaconda\lib\site-packages\pandas\core\indexing.py", line 2080, in __getitem__
return super().__getitem__(key)
File "D:\Softwares\Anaconda\lib\site-packages\pandas\core\indexing.py", line 2027, in __getitem__
return self.obj._get_value(*key, takeable=self._takeable)
TypeError: _get_value() missing 1 required positional argument: 'col'这里的问题在于 df.at 类型的索引,df.qt和df.at都是
<class 'pandas.core.indexing._AtIndexer'>
<class 'pandas.core.series.Series'> respectively.我是一个数据科学的绝对初学者,没有足够的经验,熊猫和矮胖。
发布于 2021-04-06 15:44:27
平心而论,有一种更简单的方法可以做到这一点。
df['time_taken'] = df['at'] - df.qtAtIndexer的问题之所以出现,是因为.at是熊猫的一种方法。为此,您需要确保不给列命名任何与Python/Pandas方法相同的名称。您可以通过使用df['at']而不是df.at进行索引来解决这个问题。
除此之外,这个操作--如果我理解的话--可以用一个短行和一个长的for循环来完成。
https://stackoverflow.com/questions/66971584
复制相似问题