【问题标题】:Python+Pandas+Dataframe+CSV : Code removes all rows from a dataframe instead of specified onesPython+Pandas+Dataframe+CSV:代码从数据框中删除所有行而不是指定行
【发布时间】:2018-10-05 11:32:58
【问题描述】:

我已经编写了一个代码来删除所有在 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。为什么?

【问题讨论】:

  • 你能创建示例数据吗?
  • 您的意思是要查看该数据框中的示例数据吗?
  • 列中的值是整数还是字符串?什么返回print (data.category_id.dtype)
  • 我的想法也是,看起来你的 df 中有字符串并尝试将它们与整数进行比较 - 这样,什么都找不到,你的 df 是空的
  • @jezrael : 对象

标签: python pandas csv dataframe


【解决方案1】:

问题是您的数据是字符串,而不是 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)]

【讨论】:

  • @Debbie - 然后需要data = data[pd.to_numeric(data.category_id, errors='coerce').isin(category_ids)],似乎有些非数值或不可解析的值
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多