【问题标题】:How to eliminate rows in a table pandas如何消除表熊猫中的行
【发布时间】:2017-08-02 15:52:57
【问题描述】:

我有一个小脚本,可以用 pandas 打开一个 .csv 文件。该文件是关于房屋及其价格的,但有些房屋被标记为 0 平方英尺并且仍然定价。这弄乱了我的数据,那么有没有办法完全删除 sq__ft 列中值为 0 的所有行?谢谢。

digits = pandas.read_csv('C:/Users/saeed/Downloads/Sacramentorealestatetransactions.csv')

print(tabulate(digits, headers='keys', tablefmt='psql'))

with open('C:/Users/saeed/Downloads/Sacramentorealestatetransactions.csv') as i:
    sqft = [int(row["sq__ft"]) for row in DictReader(i)]
    print(sqft)

with open('C:/Users/saeed/Downloads/Sacramentorealestatetransactions.csv') as i:
    price = [int(row["price"]) for row in DictReader(i)]
    print(price)

【问题讨论】:

  • 能否请您提供一份数据样本?

标签: python python-3.x pandas csv


【解决方案1】:

你可以使用:

df = df[~(df.sqft == 0)]

df = df[df.sqft != 0]

这是一个关于这些操作如何在可复制示例上工作的示例:

>>> import pandas as pd 
>>> df = pd.DataFrame([[1,2],[1,3]], columns=list("AB"))
>>> df 
   A  B
0  1  2
1  1  3
>>> 
>>> df[~(df.B == 3)]
   A  B
0  1  2
>>> df[df.B != 3]
   A  B
0  1  2
>>> df[df.B != 3]

【讨论】:

    【解决方案2】:

    使用boolean indexingquery

    df[df['sqft'] != 0]
    

    df.query("sqft != 0")
    

    示例:

    df = pd.DataFrame({'sq__ft':[0,2,3], 'price':[3,4,6]})
    print (df)
       price  sq__ft
    0      3       0
    1      4       2
    2      6       3
    
    df1 = df[df['sq__ft'] != 0]
    print (df1)
       price  sq__ft
    1      4       2
    2      6       3
    
    df1 = df.query("sq__ft != 0")
    print (df1)
    
       price  sq__ft
    1      4       2
    2      6       3
    

    编辑:

    如果0 不是integer,而是string 添加''

    df1 = df[df['sqft'] != '0']
    

    【讨论】:

    • 谢谢,但由于某种原因这不起作用。如果您想查看,我已经添加了实际代码
    • 那么df[df['sqft'] != '0'] 呢?
    • 很高兴能帮上忙!但似乎sqft 列中的值不仅仅是数字值,有问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多