【问题标题】:Parsing date as string from csv to pandas将日期解析为从 csv 到 pandas 的字符串
【发布时间】:2020-07-01 08:43:19
【问题描述】:

我一直在尝试使用 panda 将我的 csv 中的日期解析为字符串。

我在这里想要实现的是提取一行(从 csv 中),其中包含两种类型的数据,字符串和整数。

从这里开始,我想使用 docx-mailmerge 生成 Microsoft Word 报告。

对于上下文,我在弄清楚时指的是这里的解决方案: datetime dtypes in pandas read_csv

谢谢。

这是我得到的错误:

ValueError: int() 以 10 为底的无效文字:'Num'

这是我的代码:

import pandas as pd   

headers = ['AA', 'Num']
dtypes = {'AA': 'str', 'Num': 'int'}
pdate = ['AA']

df = pd.read_csv('test1.csv', 
header=None,
names = headers,
dtype = dtypes,
parse_dates = pdate, 
date_parser=None) 

top = df.head()
print(top)

这是我的 csv 文件:

AA,Num
1/1/2020,5
2/1/2020,10
3/1/2020,15
4/1/2020,20
5/1/2020,25
6/1/2020,30
7/1/2020,35
8/1/2020,40
9/1/2020,45
10/1/2020,50
11/1/2020,55

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    我认为问题是参数header=None,如果 csv 中没有标题,则使用它。所以删除它。参数names = headers 也应该省略,如果需要解析所有列:

    #here is set new columns names, so original headers are shift to first row of data
    df = pd.read_csv('test1.csv',
    header=None,
    names = headers,
    #dtype = dtypes,
    #parse_dates = pdate, 
    date_parser=None) 
    
    top = df.head()
    print(top)
             AA  Num
    0        AA  Num
    1  1/1/2020    5
    2  2/1/2020   10
    3  3/1/2020   15
    4  4/1/2020   20
    

    正确解析:

    df = pd.read_csv('test1.csv',
    #header=None,
    #names = headers,
    dtype = dtypes,
    parse_dates = pdate, 
    date_parser=None) 
    
    top = df.head()
    print(top)
              AA  Num
    0 2020-01-01    5
    1 2020-02-01   10
    2 2020-03-01   15
    3 2020-04-01   20
    4 2020-05-01   25
    

    如果只需要过滤某些列而不是names = headers,请使用usecols=headers 参数。

    【讨论】:

    • 谢谢你! & 我认为不允许使用“use_cols”。
    • @SyahmiShaarani - 对不起,我的错字。它是usecols,如果有很多列并且只需要解析很少,则使用它。
    • 是的,它正在工作!但是现在当我打印确切的单元格(行和列)时,我得到“2020-01-01 00:00:00”,但在数据框中它只显示日期。如何删除时间戳?
    • @SyahmiShaarani - 在 pandas 中,如果没有时间不显示00:00:00,你可以检查它print (df['AA'].tolist())。如果没有时间,请将列 AA 转换为日期,如 df['AA'] = df['AA'].dt.date
    • 还有一个问题,如果我直接使用Excel呢?问题是日期不被视为“str”,那么我该如何处理我的代码?当我使用 excel 时,我收到此错误“dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y') TypeError: strptime() argument 1 must be str, not datetime.datetime”因为大熊猫不解析日期列。
    【解决方案2】:

    这是工作代码:

    headers = ['AA', 'Num']
    dtypes = {'AA': 'str', 'Num': 'int'}
    pdate = ['AA']
    
    df = pd.read_csv('test1.csv', 
    dtype = dtypes,
    parse_dates = pdate, 
    date_parser=None)
    
    top = df.head()
    print(top)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2019-04-04
      • 2013-08-10
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多