数据帧 loc 返回空数据帧(熊猫)

时间:2021-01-19 06:17:28

标签: python pandas

我想提取特定日期范围内的一些数据,所以我使用的是熊猫。

这是一个示例数据框:

1/18/2021   3000000  ...                                  
1/18/2021   5000000  ...                                    
1/18/2021       900  ...                                    
1/18/2021   2000000  ...                                      
1/18/2021   2000000  ...                                      
12/13/2020  2910000  ...  

代码如下:

def date(start_time,end_time):
    col_names = ['time', 'amount', 'category', 'subcategory', 'resunit', 'relateunit','divtype','des']
    df = pd.read_csv('DATAss_notdivided.csv', skiprows=1, names=col_names)
    df = df.set_index(['time'])
    df = df.sort_index()       
    df=df.loc[start_time:end_time]
    print(df)
date('2018-10-10','2200-10-10')

但我得到这个输出:

Empty DataFrame
Columns: [amount, category, subcategory, resunit, relateunit, divtype, des]
Index: []

我在这里做错了什么? 注意:我使用了不同的日期格式作为输入,但它们都不起作用

2 个答案:

答案 0 :(得分:1)

您需要 DatetimeIndex,因此:

df = pd.read_csv('DATAss_notdivided.csv', skiprows=1, names=col_names)
df = df.set_index(['time'])

使用:

df = pd.read_csv('DATAss_notdivided.csv', 
                 skiprows=1, 
                 names=col_names, 
                 index_col=['time'], 
                 parse_dates=['time'])

如果可能,另一个想法是某些日期时间无效:

df = pd.read_csv('DATAss_notdivided.csv', skiprows=1, names=col_names)
df['time'] = pd.to_datetime(df['time'], errors='coerce')
df = df.set_index(['time'])

年份 2200 是有效的,如果需要一些大的时间戳,因为 timestamp limitations 是:

In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')

一起:

def date(start_time,end_time):
    col_names = ['time', 'amount', 'category', 'subcategory', 'resunit', 
                 'relateunit','divtype','des']
    df = pd.read_csv('DATAss_notdivided.csv', 
                     skiprows=1, 
                     names=col_names, 
                     index_col=['time'], 
                     parse_dates=['time'])
    df = df.sort_index()       
    df=df.loc[start_time:end_time]
    print(df)
date('2018-10-10','2200-10-10')

答案 1 :(得分:1)

这可能是因为您没有使用 datetimeindex。 此外,您已将结束日期指定为 2200 而不是 2020