【问题标题】:Unquoted date in first column pf CSV for Python/Pandas read_csvPython/Pandas 的第一列 pf CSV 中未引用的日期 read_csv
【发布时间】:2020-05-12 10:30:39
【问题描述】:

美国运通下载的传入 CSV 如下所示。 (我希望每个字段都有引号,但事实并非如此。它将第二个 CSV 列中引用的长数字视为 Pandas 数据框中的第一列,即 320193480240275508 作为我的“日期”列:

2019 年 12 月 13 日,'320193480240275508',阿拉莫租车,约翰 Doe,-12345,178.62,Travel-Vehicle Rental,DEBIT,

colnames = ['Date', 'TransNum', 'Payee', 'NotUsed4', 'NotUsed5', 'Amount', 'AmexCategory', 'DebitCredit']
df = pd.read_csv(filenameIn, names=colnames, header=0, delimiter=",")
delimiter=",")
pd.set_option('display.max_rows', 15)
pd.set_option('display.width', 200)
print (df)
print (df.values)

开始 日期 ... DebitCredit 12/13/19 '320193480240275508' ... NaN

我有一个例程来重新格式化日期(处理诸如 1/3/19 之类的事情,并添加世纪)。它是这样称呼的:

df['Date'][j] = reformatAmexDate2(df['Date'][j])

该例程显示日期如下:

def reformatAmexDate2(oldDate):
    print ("oldDate=" + oldDate)

oldDate='320193480240275508'

我看到这篇推荐 dayfirst=True 的帖子,并添加了这一点,但结果相同。我什至从未告诉 Pandas 第 1 列是日期,所以我相信它应该将其视为文本。

【问题讨论】:

  • read_csv 正在更改或替换/交换列值的列顺序?
  • 你能改一下吗,我不明白你在问什么。
  • 抱歉,我无法理解手头的问题,您说“它将第二个 CSV 列中引用的长数字视为 Pandas 数据框中的第一列”这是什么意思你想要日期列作为你的第一个?还是索引?
  • 这是一个csv,逗号之间的所有内容都应该是一个字段,因此日期应该是字段1,320193480240275508应该是TransNum等......

标签: python-3.x pandas


【解决方案1】:

查看数据,我没有注意到列值后面的逗号,即“DEBIT”后面的逗号

12/13/19,'320193480240275508',Alamo Rent A Car,John Doe,-12345,178.62,Travel-Vehicle Rental,DEBIT,

我刚刚在列数组的末尾添加了另一列:

colnames = ['Date', 'TransNum', 'Payee', 'NotUsed4', 'NotUsed5', 'Amount', 'AmexCategory', 'DebitCredit','NotUsed9']

生活是美好的。

【讨论】:

    【解决方案2】:

    IIUC,问题似乎是name=colnames,它为从 csv 文件中读取的列设置了新名称,当您尝试从 csv 文件中读取特定列时,您可以使用 usecol

    df = pd.read_csv(filenameIn,usecols=colnames, header=0, delimiter=",")
    

    【讨论】:

    • 稍后我会详细了解不同之处,但现在切换到 usecols 会出现此错误:“columns expected but not found: {missing}”.format(missing=missing) ValueError: Usecols do not match列,预期但未找到的列:['NotUsed5', 'AmexCategory', 'NotUsed4', 'DebitCredit', 'Payee', 'TransNum']。我认为某些字段周围没有单引号仍然很困惑。 Names= 在我之前从 American Express 下载的文件中运行良好,在它们更改格式之前。
    • 你可以跳过usecols,阅读整个文件,然后用df.columns列出列名,看看有没有遗漏
    • 现在我更困惑了。我确实在文件中有一个标题行,然后将其取出。我想使用我自己的列名。如果我按照你说的做,它将第一行数据显示为列名: Index(['12/22/19', ''320193570416107042'', 'SOMEPAYYNAME', 'NEAL WALTERS', '-xxxxx', ' 9.99'、'商业服务-广告服务'、'借方'、'未命名:8']、dtype='object')。那么为什么它不能在我的场景中正确解析日期呢?
    • 我在他们的数据末尾发现了一个额外的逗号,所以在我的列数组中添加了另一个列名。
    猜你喜欢
    • 2019-03-17
    • 2017-12-18
    • 2023-03-17
    • 2021-05-31
    • 2014-01-30
    • 1970-01-01
    • 2013-03-24
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多