【问题标题】:How to combine csv columns with Python如何将 csv 列与 Python 结合起来
【发布时间】:2020-01-23 14:49:31
【问题描述】:

我得到的是一个具有以下结构的 CSV 文件:

column1 column2 column3 column4(day) column5(month&year) column6(time)

column1 column2 column3 column4(day) column5(month&year) column6(time)

column1 column2 column3 column4(day) column5(month&year) column6(time)

...

文件的列没有名称。现在我想合并 column4 和 column5 并生成一个新版本的 CSV 文件,这样我就可以在一个单元格中获得完整的日期。

我尝试的是遵循 Python 代码:


def correctDatetime():
    with open("inputfile.csv", "r") as source, open("outputfile.csv", "w") as result:
        df = pd.read_csv('C:/ProgrammingProjects/LicMonTest/inputfile.csv', header=0)

        for row in source:
            df['Datetime'] = df[df.columns[3:]].apply(lambda x: ' '.join(x.dropna().astype(str)), axis=1)
        result.write(df)

很遗憾,这只会生成一个空的 CSV 文件。我怎样才能最好地解决这个问题?任何意见将是有益的。提前致谢!

【问题讨论】:

    标签: python excel pandas csv


    【解决方案1】:
    import pandas as pd
    #Setup DF
    data = [
    (1234,    1,     'x', 'x', 34, 'May 2019'),
    (1234,    2,     'x', 'x', 34, 'June 2019'),
    (1235,    1,     'y', 'y', 34, 'July 2019')]
    df = pd.DataFrame(data)
    

    以下代码将根据列位置组合您的数据,然后删除不必要的列并保存到some_csv.csv

    df['Datetime']=df.apply(lambda x:'%s %s' % (str(x[df.columns[4]]),str(x[df.columns[5]])),axis=1)
    df.drop(columns=[df.columns[4],df.columns[5]], inplace=True)
    df.to_csv('some_csv.csv')
    

    【讨论】:

      【解决方案2】:

      添加header=None,因为csv文件中没有标题到read_csv,然后通过DataFrame.pop提取列34并连接在一起,最后通过DataFrame.to_csv写入文件:

      def correctDatetime():
          df = pd.read_csv('C:/ProgrammingProjects/LicMonTest/inputfile.csv', header=None)
          df['Datetime'] = df.pop(3) + ' ' + df.pop(4) + ' ' + df.pop(5)
          df.to_csv("outputfile.csv", index=False, header=False)
      

      如果需要转换为日期时间,格式为month,年份为MMYYYY,时间列为HH:MM:SS,添加to_datetime

      def correctDatetime():
          df = pd.read_csv('C:/ProgrammingProjects/LicMonTest/inputfile.csv', header=None)
          s = df.pop(3) + '-' + df.pop(4) + ' ' + df.pop(4)
          df['Datetime'] = pd.to_datetime(s, format='%d-%m%Y %H:%M:%S')
          df.to_csv("outputfile.csv", index=False, header=False)
      

      【讨论】:

      • 不应该header=None 吗? OP 说文件不包含列名
      • 很遗憾,这不起作用。提供的代码不会合并/合并两列,它只是将“0,日期时间”插入单元格 A1。
      • @sim_rum - print (df.head()) 是什么?
      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多