使用带过滤器的pandas写入csv

时间:2017-02-11 20:28:26

标签: python csv pandas dataframe

我正在使用pandas库使用Python加载csv文件。

import pandas as pd
df = pd.read_csv("movies.csv")

然后我会检查列中的特定值或语句,例如:

viewNum = df["views"] >= 1000
starringActorNum = df["starring"] > 3
df["title"] = df["title"].astype("str")
titleLen = df["title"].str.len() <= 10

我想使用上面的标准创建一个新的csv文件,但我不确定如何做到这一点以及如何将所有这些属性组合成一个csv。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用&(按位和):

组合布尔掩码
mask = viewNum & starringActorNum & titleLen

选择其中df为真的mask行:

df_filtered = df.loc[mask]

将DataFrame写入csv:

df_filtered.to_csv('movies-filtered.csv')
import pandas as pd

df = pd.read_csv("movies.csv")

viewNum = df["views"] >= 1000
starringActorNum = df["starring"] > 3
df["title"] = df["title"].astype("str")
titleLen = df["title"].str.len() <= 10

mask = viewNum & starringActorNum & titleLen
df_filtered = df.loc[mask]

df_filtered.to_csv('movies-filtered.csv')

答案 1 :(得分:0)

您可以使用panda.DataFrame.query()界面。它允许文本字符串查询,并且对于大型数据集来说非常快。

这样的事情应该有效:

import pandas as pd
df = pd.read_csv("movies.csv")

# the len() method is not available to query, so pre-calculate
title_len = df["title"].str.len()

# build the data frame and send to csv file, title_len is a local variable
df.query('views >= 1000 and starring > 3 and @title_len <= 10').to_csv(...)