为了账号安全,请及时绑定邮箱和手机立即绑定

使用 .at 在 Pandas DataFrame 中设置值,难以理解的类型错误

使用 .at 在 Pandas DataFrame 中设置值,难以理解的类型错误

慕的地10843 2021-10-10 15:22:14
我正在为一些机器学习构建一个熊猫数据框。X Dataframe 有一个日期索引,由我的各种数据文件中的所有现有日期组成:all_index=set()for table in data:    for date in table.index.values:        all_index.add(date)然后我构建我的数据变量,我想合并我拥有的每个数据:temp2= np.empty((len(all_index),1,))temp2[:]=np.nanX=pd.DataFrame(temp2, all_index)而且,当然,现在我想用数据填充它(数据是 1 个 DF,稍后,它将是一个 DF 列表):for i in X.index.values:    for j in data[0].index.values:        if(j==i):            X.at[i, 0] = data['Column Name'][i]错误是:---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-73-73562c8b1e98> in <module>      8             #X[i]=data[0]['BCH-USD'][i]      9             elem = data[0]['BCH-USD'][str(i)]---> 10             X.at[i, 0] = elem     11             #print(X[0][i])     12             print(data[0]['BCH-USD'][i])~\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value)   2157         key = list(self._convert_key(key, is_setter=True))   2158         key.append(value)-> 2159         self.obj._set_value(*key, takeable=self._takeable)   2160    2161 ~\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py in _set_value(self, index, col, value, takeable)   2580             series = self._get_item_cache(col)   2581             engine = self.index._engine-> 2582             engine.set_value(series._values, index, value)   2583             return self   2584         except (KeyError, TypeError):我试过的:这个错误很奇怪,因为 set_value 已被弃用。并且文档页面说使用 .at。.at 使用 set_value ...我还尝试查看变量的类型 type(data['Column Name'][i]) -> 它是 float64我也尝试使用 pd.is_numeric 进行转换。同样的错误我尝试在循环中打印出 data['Column Name'][i] ,没有错误。如果我尝试打印出 X,也没有错误。如果我尝试不使用循环: X.at['2018-11-24', 0] = data['Column Name'][0] 它有效......我希望得到:一个 DataFrame 将我的多个 csv 文件中的所有日期作为索引,作为我的 csv 文件中的值(如果可用)的列。如果不可用,就 nan。
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我终于通过使用 join() 解决了我的问题,我以前没有管理过。


首先,我构建了一个具有所有可能日期的临时 DataFrame:


all_dates=set()

for table in data:

    for ind in table.index.values:

        all_dates.add(table['Date'][ind])


dates_list=list(all_dates)

Data={'Date': dates_list}

temp=pd.DataFrame(Data)

temp.sort_values(by=['Date'], inplace=True, ascending=True)

temp=temp.reset_index(drop=True)

然后,我将该临时数据框加入了我从 CSV 中提取的数据框列表中(因为它拥有最多的索引,所以放在最上面):


data.insert(0,temp)

dfs = [df.set_index('Date') for df in data]

df_final=dfs[0].join(dfs[1:])

因此,df_final将日期作为索引(已排序),列仅是提取的数据帧的列。


这种方法的优点是,当一个数据源不完整时,df_final 将在那里有“nan”而不是少一行并丢失该日期其他源的所有值。


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号