【问题标题】:Column appended to dataframe coming up empty附加到数据框的列变为空
【发布时间】:2021-02-25 01:14:35
【问题描述】:

我有以下代码:

import glob
import pandas as pd
import os
import csv

myList = []

path = "/home/reallymemorable/Documents/git/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports_us/*.csv"


for fname in glob.glob(path):
    df = pd.read_csv(fname)
    row = df.loc[df['Province_State'] == 'Pennsylvania']

    dateFromFilename = os.path.basename(fname).replace('.csv','')

    fileDate = pd.DataFrame({'Date': [dateFromFilename]})

    myList.append(row.join(fileDate))


concatList = pd.concat(myList, sort=True)

print(concatList)

concatList.to_csv('/home/reallymemorable/Documents/test.csv', index=False, header=True

它会遍历一个 CSV 文件夹并抓取特定行并将其全部放入 CSV。文件本身的名称类似于 10-10-2020.csv。我有一些代码可以获取文件名并删除文件扩展名,所以我只剩下日期了。

我正在尝试添加另一个名为“日期”的列,其中包含每个文件的文件名。

脚本几乎可以运行:它为我提供了我从各种 CSV 中提取的所有行的 CSV,但日期列本身是空的。

如果我执行print(dateFromFilename),日期/文件名会按预期打印(例如10-10-2020)。

我做错了什么?

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    我相信join 默认有how=left。而且您的fileDate 数据框的索引与row 不同,因此您不会得到日期。相反,做一个作业:

    for fname in glob.glob(path):
        df = pd.read_csv(fname)
        row = df.loc[df['Province_State'] == 'Pennsylvania']
    
        dateFromFilename = os.path.basename(fname).replace('.csv','')
    
        myList.append(row.assign(Date=dateFromFilename))
    
    concatList = pd.concat(myList, sort=True)
    

    另一种方法是将数据帧存储为字典,然后进行 concat:

    myList = dict()
    
    for fname in glob.glob(path):
        df = pd.read_csv(fname)
        row = df.loc[df['Province_State'] == 'Pennsylvania']
    
        dateFromFilename = os.path.basename(fname).replace('.csv','')
    
        myList[dateFromFilename] = row
    
    concatList = pd.concat(myList, sort=True)
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 2022-11-25
      • 2021-06-06
      • 2021-05-01
      • 2019-01-22
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多