【问题标题】:Append in my code doesn't properly work sometimes附加在我的代码中有时无法正常工作
【发布时间】: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] ,它返回最后一行,你能确认它总是填写吗?

标签: python pandas csv


【解决方案1】:

大家非常感谢任何试图提供帮助的人。事实证明,如果您再添加一个列名(我添加了 aq,总共达到 44 个),问题就得到了解决,尽管所有文件都达到了 43 列并且永远不会超过。我不知道这是否是一个正确的答案,但它肯定可以解决问题。

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多