将选定的 csv 行附加到 python 中的另一个 csv
Append selected row of csv to another csv in python
我正在尝试编写一个程序,它将一个 csv 文件的 selected 列作为一行附加到另一个 csv 文件。
我有这个代码:
def append_pandas(s,d):
import pandas as pd
df = pd.read_csv(s, sep=';', header=None)
df_t = df.T
df_t.columns = df_t.iloc[0]
df_new = df_t.drop(0)
pdb = pd.read_csv(d, sep=';')
newpd = pdb.append(df_new)
newpd.to_csv(d)
只对第一个文件执行此操作,如下所示:
这正是我想要的。但是当添加下一个文件时,会发生这样的事情:
以及以下文件:
我很困惑。如何使它们逐行对齐?..
请帮助:(
P.S。我的初始 csv 文件采用这种格式(这就是为什么我需要 select 特定列 - 单元格计数):
因为有一次,您使用默认分隔符 ','
保存了 newpd
(通过不指定分隔符),而下次您读回时,您使用分隔符读取它';'
这当然是不正确的,因为它应该是 ','
.
解决方法是始终使用 ';'
作为分隔符,因此您需要像这样 to_csv
newpd.to_csv(d, sep=';')
如果您想将 ','
用于组合数据框,您只需要注意何时读取分隔符 ';'
以及何时读取 ','
.
第二种方法
如果 files
是您要合并的所有 csv 文件的文件路径列表,您实际上可以这样做
newpd = pd.concat([pd.read_csv(file, sep=';').set_index('ID').T for file in files])
newpd.to_csv('name.csv', sep=',') # or ';'
这里读取每个文件,设置'ID'
为index,.T
让index成为header,最后将所有得到的dataframes拼接成一个,保存!
我正在尝试编写一个程序,它将一个 csv 文件的 selected 列作为一行附加到另一个 csv 文件。
我有这个代码:
def append_pandas(s,d):
import pandas as pd
df = pd.read_csv(s, sep=';', header=None)
df_t = df.T
df_t.columns = df_t.iloc[0]
df_new = df_t.drop(0)
pdb = pd.read_csv(d, sep=';')
newpd = pdb.append(df_new)
newpd.to_csv(d)
只对第一个文件执行此操作,如下所示:
这正是我想要的。但是当添加下一个文件时,会发生这样的事情:
以及以下文件:
我很困惑。如何使它们逐行对齐?.. 请帮助:(
P.S。我的初始 csv 文件采用这种格式(这就是为什么我需要 select 特定列 - 单元格计数):
因为有一次,您使用默认分隔符 ','
保存了 newpd
(通过不指定分隔符),而下次您读回时,您使用分隔符读取它';'
这当然是不正确的,因为它应该是 ','
.
解决方法是始终使用 ';'
作为分隔符,因此您需要像这样 to_csv
newpd.to_csv(d, sep=';')
如果您想将 ','
用于组合数据框,您只需要注意何时读取分隔符 ';'
以及何时读取 ','
.
第二种方法
如果 files
是您要合并的所有 csv 文件的文件路径列表,您实际上可以这样做
newpd = pd.concat([pd.read_csv(file, sep=';').set_index('ID').T for file in files])
newpd.to_csv('name.csv', sep=',') # or ';'
这里读取每个文件,设置'ID'
为index,.T
让index成为header,最后将所有得到的dataframes拼接成一个,保存!