我有多个文本(.txt
)文件保存在文件夹中。我正在尝试将它们全部合并到一个数据帧中。到目前为止,我已经能够将它们组合起来,但不是以我喜欢的方式。
文本文件(名为yob####.txt
,其中####
为一年)的信息如下所示:
Jennifer,F,58376
Amanda,F,35818
Jessica,F,33923
Melissa,F,31634
Sarah,F,25755
Heather,F,19975
Nicole,F,19917
Amy,F,19834
Elizabeth,F,19529
Michelle,F,19122
Kimberly,F,18499
Angela,F,17970
我正在尝试打开每个文件,将年份添加到行尾,然后继续。
def main():
files = file_paths(FILE_FOLDER) # returns a list of file paths, i.e. ["C:\Images\file.txt","C:\Images\file2.txt", ...]
df = []
for file in files:
year = file.split("\\")[-1][3:7]
df.append(pd.read_table(file)+","+year)
big_df = pd.concat(df, ignore_index=True, axis=1)
big_df.to_csv("Combined.csv", header=False, index=False)
这几乎可以工作......除了它需要每个文件并将数据放在一列中,第二列中的下一个文件,第三列中的下一个文件等等。
预期输出相同,除非打开1881文件,它会将信息添加到1880
的末尾。然后1882
会追踪1881
数据等等。
答案 0 :(得分:4)
read_table
时,默认的分隔符将被假定为空格(sep='\t'
)。将read_table
更改为read_csv
,即可推断您的分隔符。或者,指定sep=','
以获得相同的效果。year
,但您没有正确执行此操作。您可以使用assign
将其添加到axis=0
,默认设置),而不是水平连接。
df_list = []
for file in files:
year = ...
df_list.append(pd.read_csv(file, header=None).assign(year=year))
big_df = pd.concat(df_list, ignore_index=True)
big_df.to_csv("Combined.csv", header=False, index=False)
答案 1 :(得分:0)
您可以在迭代时使用pd.DataFrame.assign
无缝添加列。
另请注意,最好使用os.path.basename
而不是按特定字符拆分:这将确保您的代码可以在多个平台上运行。
已更新:添加header=None
并使用pd.read_csv
,如其他答案所述。
dfs = []
for file in files:
year = os.path.basename(fn)[3:7]
dfs.append(pd.read_csv(file, header=None).assign(Year=year))
df = pd.concat(dfs, ignore_index=True, axis=1)
更有效的方法是使用列表理解:
dfs = [pd.read_csv(file, header=None).assign(Year=os.path.basename(fn)[3:7]) \
for file in files]
df = pd.concat(dfs, ignore_index=True, axis=1)