如何将多个csv文件中的行复制到pandas中的新文件?

时间:2019-05-19 11:50:53

标签: python pandas csv row

我有10个csv文件。我想从所有csv文件中复制第一行并另存为新的csv文件,然后从所有csv文件中复制第二行并另存为第二个csv文件等。下面的代码仅对第一行和其他rwos显示{{ 1}}。我的错误在哪里?

代码

NaN

结果

import pandas as pd
import datetime
import glob

path = r'/Jupyter_Works/new_csv'
all_files = glob.glob(path + "/*.csv")

date_time = datetime.datetime(2018, 1, 1)
index = pd.date_range(start='1/1/2018', periods= 8760, freq='H')

columns = ['Lat','Lon','Alt','Temperature','Relative Humidity','Wind speed','Wind direction','Short-wave irradiation']
dfcsv = pd.DataFrame(index=index, columns=columns)

for filename in all_files:
    df = pd.read_csv(filename, index_col='time', header=0)
    dfcsv.iloc[0] = df.iloc[0]

dfcsv

1 个答案:

答案 0 :(得分:3)

首先创建一个具有列表理解和concat的大型DataFrame,按唯一值循环,由loc选择,然后由DataFrame.to_csv写入文件。之所以有效,是因为每个DataFrame都有唯一的索引,因此如果按唯一的值进行选择,则选择所有文件中具有相同位置的行。

path = r'/home/nickan/Jupyter_Works/new_csv'
all_files = glob.glob(path + "/*.csv")

dfs = [pd.read_csv(fp, index_col='time', parse_dates=['time']) for fp in all_files]
df = pd.concat(dfs)

for x in df.index.unique():
    #removed duplicated index by index=False
    df.loc[x].to_csv(f'csv/file_{x.strftime("%Y-%m-%d_%H")}.csv', index=False)

编辑:

因为可能存在内存问题,请使用替代解决方案,在dataFrames中逐行循环并以追加模式写入:

for i, fp in enumerate(all_files):
    df = pd.read_csv(fp, index_col='time', parse_dates=['time']) 
    for x in df.index:
        f = f'out/file_{x.strftime("%Y-%m-%d_%H")}.csv'
        if i == 0:
            df.loc[[x]].to_csv(f, index=False)

        else:
            df.loc[[x]].to_csv(f, index=False,header=None, mode='a')