使用pandas过滤CSV

时间:2018-02-07 16:23:01

标签: python pandas csv

我需要在Impresiones_exchange列中过滤我的CSV,其值大于10.当我这样做时,我会收到一个新的CSV(ssss.csv),只有一列和一个True或False值。正如我之前所说的,我需要在df["eCPM_a_pagar_a_medio"]过滤后获取超过10的值。

def group():
    df = pd.read_csv('Impresiones_VIDEO.csv', sep=',')
    df = df.groupby(["Cliente","Sitio","Country"], as_index=False)['Subastas', 'Impresiones_exchange', 'Importe_a_cobrar', 'Importe_a_pagar_a_medio'].sum()
    df["Fill_rate"] = ((df.Impresiones_exchange / df.Subastas )* 100).round(2)
    df["eCPM_a_cobrar"] = ((df.Importe_a_cobrar / df.Impresiones_exchange )* 1000).round(2)
    df["eCPM_a_pagar_a_medio"] = ((df.Importe_a_pagar_a_medio / df.Impresiones_exchange )* 1000).round(2)
    a = df['Impresiones_exchange'] > 10
    a.to_csv('ssss.csv')

2 个答案:

答案 0 :(得分:2)

替换此行:

a = df['Impresiones_exchange'] > 10

有这样的事情:

a = df[df['Impresiones_exchange'] > 10]

您的代码不起作用的原因是您的a设置为布尔系列。实际上,您想要的是使用布尔系列来索引数据帧。

答案 1 :(得分:0)

使用query我可以过滤csv列的值并获取所有列!

def group():
    df = pd.read_csv('Impresiones_VIDEO.csv', sep=',')
    df = df.groupby(["Cliente","Sitio","Country"], as_index=False)['Subastas', 'Impresiones_exchange', 'Importe_a_cobrar', 'Importe_a_pagar_a_medio'].sum()
    df["Fill_rate"] = ((df.Impresiones_exchange / df.Subastas )* 100).round(2)
    df["eCPM_a_cobrar"] = ((df.Importe_a_cobrar / df.Impresiones_exchange )* 1000).round(2)
    df["eCPM_a_pagar_a_medio"] = ((df.Importe_a_pagar_a_medio / df.Impresiones_exchange )* 1000).round(2)
    df_filtered = df.query('Impresiones_exchange>10')
    df_filtered.to_csv('Impresiones_VIDEO.csv', index=False)