Python+Pandas+Dataframe+CSV : Code removes all rows from a dataframe instead of specified ones

标签 python pandas csv dataframe

我编写了一段代码来删除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。为什么?

最佳答案

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

关于Python+Pandas+Dataframe+CSV : Code removes all rows from a dataframe instead of specified ones,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664730/

相关文章:

python - 尝试导入模块时出错

python - xlsx writer - 如何仅在单元格的一侧获得粗边框?

php - 我应该如何转义 SQL 查询中的引号?

java - 使用java将XML文件转换为CSV文件(具有多个元素值)

Pythonnet System.Object[,] 到 Pandas DataFrame 或 Numpy 数组

python - 什么是 "&="运算符以及为什么 Twilio 在比较字符串时使用它?

python - pandas drop_duplicates() "keep"参数给出了截然不同的答案 - 它是如何工作的?

PHP - 使用 LOAD DATA INFILE 将 CSV 文件导入 mysql 数据库

python - Pandas group by on groupby 到列表列表

Python 读取带有希伯来文标题的 csv