python - 如何使用用户输入迭代地构建 pd 系列,一次一个单元格?
问题描述
我正在尝试使用我自己的输入数据对 pd 系列中剩余的默认猫进行分类:
ex_df = df[df['Cat_Self_Pred'] == 'Uncatted'][['Content','Amount','Cat_Self_Pred']] # shallow copy, so that the orig df is changed
for x in range(len(ex_df)): # how ever many this would be
print(ex_df[['Content','Amount']].loc[x])
ex_df['Cat_Self_Pred'].loc[x] = input()
因此,对于 df['Cat_Self_Pred'] 的“Un_catted”,我想使用一种理解来根据“内容”和“金额”一次输入每一个
即使我执行上述操作,我也会收到有关将值分配给数据框副本的警告
解决方案
ex_df
是对数据框进行 2 次“索引”操作的结果,因此分配给它总是会产生警告。基本上它可能是一个view
(你称之为浅拷贝)或一个copy
.
看the pandas docs
这个:
分配给链式索引的乘积具有固有的不可预测的结果。[...] 很难预测它会返回视图还是副本(这取决于数组的内存布局,pandas 对此不做任何保证)
好消息是,有一种简单且明确的方法可以实现您想要实现的目标。
您可以迭代索引并直接分配给,而不是创建副本并对其行进行迭代df
:
for idx in df.index[df['Cat_Self_Pred'] == 'Uncatted']:
print(df.loc[idx, ['Content', 'Amount']])
df.loc[idx, 'Cat_Self_Pred'] = input()
另请注意,您正在使用.loc[x]
但x
不是索引,它是 ex_df 中的整数行号 - 在这种情况下您需要.iloc[x]
.
推荐阅读
- gitlab - 桥和作业 Gitlab API 端点找不到子管道及其作业
- reactjs - React JS 中的 AWS Amplify 身份验证屏幕自定义
- sql - 将 SQL Server / C# 查询转换为 PostgreSQL
- nginx - 为什么我的 nginx 测试页面 ipaddress 在向我的 ip 地址添加两个静态页面后显示 403 禁止?
- javascript - 超级表达式必须为 null 或函数 Uppy Plugin React Js
- javascript - 如何使用 http post 或 get 正确执行后端
- python - 需要在运行时将参数传递给 Unix 脚本
- google-cloud-platform - 删除 Google Cloud 中的一些 IAM 帐户未能提取图像
- oauth-2.0 - 是否可以为 MQTT Broker Mosquitto 设置 oauth2 身份验证?
- python - 轴标题使用 plotly 重叠轴刻度