【发布时间】:2019-07-10 09:10:11
【问题描述】:
我已经生成了一些 python 代码行,它们应该读取目录中的所有 csv 文件并生成一个新的 csv 文件,其中包含每个文件的最后一行。但是,似乎其中一些行在被完美复制时(我使用调试器对其进行了验证)最终会混淆结果文件中的第一列,这并非在所有行中都发生。本专栏包含有用的信息,我不希望它丢失。这些文件最多可以有 43 列,这就是我将列添加到 aq 的原因。
import pandas as pd
import glob
path = r'specific directory\*.csv' #the directory is private that's why i replaced it
files = glob.glob(path)
df = pd.DataFrame(columns = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai', 'aj', 'ak', 'al', 'am', 'an', 'ao', 'ap', 'aq'])
for name in files:
df_n = pd.read_csv(name, names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai', 'aj', 'ak', 'al', 'am', 'an', 'ao', 'ap', 'aq'])
df_r = df.append(df_n.iloc[-1], ignore_index=True)
df = df_r
del df_n
del df_r
r_path = r'specific directory\result.csv'
df.to_csv(r_path, index=False, header=False)
del df
【问题讨论】:
-
你能测试一下从中删除
df_r变量是否会改变任何东西吗?就做df=df.append(…) -
@PiotrKamoda 好吧,它确实为我节省了 2 行代码,但不幸的是问题仍然存在。
-
您写道,文件可能包含多达 43 列 - 我知道不同的文件可能有不同的列。因此,我猜每个文件都包含列名。但与此同时,您使用
pd.read_csv的names参数,它会覆盖文件中存在的标头。也许您想使用usecols参数? -
@michcio1234 如果我理解你的意思正确:文件本身没有列名,这就是我添加列名的原因,因为当我没有时程序会使用第一行数据作为列名,因此在结果文件中实现它。这就是我添加它们然后将它们隐藏在结果文件中的原因。
-
你正在做 .iloc[-1] ,它返回最后一行,你能确认它总是填写吗?