2016-03-17 26 views
0

我有使用Data = pandas.read_csv子集的数据帧与日期为'str`和NaN值在Python

其中一个数据帧的各列的是日期的数据帧,从.csv文件中提取,如'14/09/2015' ,数据类型为str

我需要创建一个子集,这是我使用方法:NewDataFrame = DataFrame['DatesColumn'][DataFrame['DatesColumn']==desired date]

但我有两个主要问题:

  1. 由于日期字符串,我曾尝试使用切片[-1 ]。但我得到的错误:KeyError : -1L

我试图用这个代码选择2014:

NewDataFrame = DataFrame['DatesColumn'][DataFrame['DatesColumn'][-1]==4]

  • 我已经空字段已导入作为nan值。如果我尝试执行for环路转换数据,我得到的错误:
  • TypeError: 'float' object has no attribute '__getitem__'

    问:我如何子集数据(或清洁)的一年?

    非常感谢。

    回答

    1

    对于NaN值,您可以使用fillna()

    # to fill NaNs with zeros 
    noNans = withNans.fillna(0) 
    

    及日期问题, 代替自己处理日期字符串,你应该让已经 现有库处理它们。在这种情况下,read_csv()功能 可以为你做。 请参阅文档 here

    这里有一个小例子:

    CSV文件:

    1,14/09/2016,dataa 
    1,14/09/2015,dataa 
    2,14/10/2014,dataa2 
    

    代码:

    import pandas as pd 
    from datetime import date 
    
    df = pd.read_csv("test.csv", header=None, parse_dates=[1]) 
    df[df[1] > date.today()] 
    

    只打印

    0   1  2 
    0 1 2016-09-14 dataa 
    
    +0

    它的工作!该列被转换为“数据类型”,我可以用比较运算符处理它。 nan值被转换成NaT值,所以我不必处理它们。有一件事仍然困扰着我。我尝试了'.fillna()'方法,但它不起作用。当pd.read_csv读取一个空字段时,我得到的nan值的类型是'float'。它不应该是numpy.float? – Pau