python - Python+Pandas+Dataframe+CSV:代码从数据框中删除所有行而不是指定行
问题描述
我编写了一个代码来删除所有在 category_id 列中具有 NaN 的行,它成功地删除了 category_id 列中具有 NaN 的行:
#removal of rows in dataframe that have NaN values in 'category_id' column
#data = data[np.isfinite(data['category_id'])]
data = data[data['category_id'].notnull()]
print(data['category_id'].shape)
data.to_csv('dataset.csv', encoding='utf-8', index=False)
print(type(data['category_id']))
输出:
(778,)
<class 'pandas.core.series.Series'>
接下来,我编写了一个代码来保留所有仅在列表中指定值的行:
#selecting rows of the dataset whose 'category' column has values mentioned in a list
category_ids = [19, 22, 2, 30, 23]
data = data[data.category_id.isin(category_ids)]
print(data.shape)
data.to_csv('dataset.csv', encoding='utf-8', index=False)
输出:
(0, 164)
因此,它会生成空数据框和 CSV。为什么?
解决方案
问题是您的数据是字符串,而不是 column 中的整数category_id
。
print (data.category_id.dtype)
object
所以需要将列表中的值转换为字符串:
category_ids = ['19', '22', '2', '30', '23']
data = data[data.category_id.isin(category_ids)]
或通过以下方式将列转换为整数Series.astype
:
category_ids = [19, 22, 2, 30, 23]
data = data[data.category_id.astype(int).isin(category_ids)]
推荐阅读
- ios - 矢量图像未显示在 iOS 资产目录 (Assets.xcassets) 中,同时新资产获得不完整的 Contents.json 文件
- android - 从webview android中的url获取cookie
- facebook - Facebook 在获得商业和发布页面权限后要求“完成验证”
- postgresql - Postgresql 按计数查找,连接表
- css - 可以制作非常大的线性渐变吗?
- javascript - Rollup + Typescript:最终输出中的 lib/index.js 连接模块
- java - Hibernate Envers:org.hibernate.tool.schema.spi.SchemaManagementException:Schema-validation:在审计表中遇到错误的列类型
- java - Spring Data ExampleMatchers by Example 返回空数组
- java - 是否建议使用 aerospike 在某些字段上进行过滤
- reactjs - 如何使用 react 和 redux-thunk 在异步实体创建 (POST) 后刷新实体列表 (GET)