【问题标题】:csv column no filtering, no errorcsv列没有过滤,没有错误
【发布时间】:2017-07-19 02:11:29
【问题描述】:

文件:

SYMBOL,DATE1,PREV_CLOSE,CLOSE_PRICE,DELIV_QTY,DELIV_PER,P/L_PER
20MICRONS,23-Feb-2017,36.55,35.9,41182,76.49,-1.77838577291
3IINFOTECH,23-Feb-2017,5.3,5.25,1240915,60.45,-0.943396226415
3MINDIA,23-Feb-2017,11135.85,11038.15,360,69.50,-0.877346587822
63MOONS,23-Feb-2017,80.3,80.6,26958,53.38,0.373599003736
63MOONS,23-Feb-2017,80.3,80.6,26958,53.38,0.373599003736
8KMILES,23-Feb-2017,588.75,586.75,10141,46.50,-0.339702760085
A2ZINFRA,23-Feb-2017,40.95,40.55,116344,48.67,-0.97680097680

根据我的代码和输入文件,它应该根据条件输出所有具有列DELIV_QTY 的行,但是当我运行代码时,没有错误,文件也没有变化。

请更正我的代码。

import pandas as pd
df = pd.read csv('bhavcopy.csir', index_col = False) 
df[df.DELIV QTY >= 10000 ]
df.to csv('bhavcopy.csir', index = False)

【问题讨论】:

标签: python pandas indexing conditional-statements


【解决方案1】:

您需要将输出分配给df,因为boolean indexing 不能就地工作:

df = df[df.DELIV_QTY >= 10000]
print (df)
       SYMBOL        DATE1  PREV_CLOSE  CLOSE_PRICE  DELIV_QTY  DELIV_PER  \
0   20MICRONS  23-Feb-2017       36.55        35.90      41182      76.49   
1  3IINFOTECH  23-Feb-2017        5.30         5.25    1240915      60.45   
3     63MOONS  23-Feb-2017       80.30        80.60      26958      53.38   
4     63MOONS  23-Feb-2017       80.30        80.60      26958      53.38   
5     8KMILES  23-Feb-2017      588.75       586.75      10141      46.50   
6    A2ZINFRA  23-Feb-2017       40.95        40.55     116344      48.67   

    P/L_PER  
0 -1.778386  
1 -0.943396  
3  0.373599  
4  0.373599  
5 -0.339703  
6 -0.976801  

query 的另一个解决方案:

df = df.query('DELIV_QTY >= 10000')
print (df)
       SYMBOL        DATE1  PREV_CLOSE  CLOSE_PRICE  DELIV_QTY  DELIV_PER  \
0   20MICRONS  23-Feb-2017       36.55        35.90      41182      76.49   
1  3IINFOTECH  23-Feb-2017        5.30         5.25    1240915      60.45   
3     63MOONS  23-Feb-2017       80.30        80.60      26958      53.38   
4     63MOONS  23-Feb-2017       80.30        80.60      26958      53.38   
5     8KMILES  23-Feb-2017      588.75       586.75      10141      46.50   
6    A2ZINFRA  23-Feb-2017       40.95        40.55     116344      48.67   

    P/L_PER  
0 -1.778386  
1 -0.943396  
3  0.373599  
4  0.373599  
5 -0.339703  
6 -0.976801 

【讨论】:

  • 您好 jezrael,感谢您的快速评论,它的工作。
  • 同样适用于 P/L_PER,但当我过滤另一列时不起作用,如果我搜索为字符串,它就起作用了。例如,“DELIV_PER”列中的“100.00”。我将您的命令设为 >= 99,然后没有输出,但是当我搜索“DELIV_PER == 100.00”时,就会有结果。必须做什么。可能存在与数据类型相关的问题。如何将所有列值更改为浮点数。
  • 您可以通过df['DELIV_PER'] = df['DELIV_PER'].astype(float) 进行转换,如果不起作用,请使用df['DELIV_PER'] = pd.to_numeric(df['DELIV_PER'], errors='coerce') 将非数值转换为NaN
  • 非常感谢!!!!!!!我从stackoverflow做同样的事情。我将非数值“-”替换为 0(零)。非常快的答案......真的非常快。
猜你喜欢
  • 2022-01-04
  • 2017-02-02
  • 1970-01-01
  • 2011-05-02
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多