【问题标题】:Pandas - Adding dummy header column in csvPandas - 在 csv 中添加虚拟标题列
【发布时间】:2018-11-02 09:03:54
【问题描述】:

我正在尝试使用以下代码按客户组连接多个 csv 文件:

files = glob.glob(file_from + "/*.csv") <<-- Path where the csv resides
df_v0 = pd.concat([pd.read_csv(f) for f in files]) <<-- Dataframe that concat all csv files from files mentioned above

问题是 csv 中的列数因客户而异,而且他们没有头文件。

我正在尝试查看是否可以根据该 csv 中的列数添加带有 col_1、col_2 等标签的虚拟标题列。

谁能指导我如何完成这项工作。谢谢。

关于尝试在 Dataframe 中搜索特定字符串的更新:

示例数据框

col_1,col_2,col_3
fruit,grape,green
fruit,watermelon,red
fruit,orange,orange
fruit,apple,red

试图过滤掉带有单词 red 的行,并期望它返回第 2 行和第 4 行。

尝试了以下代码:

df[~df.apply(lambda x: x.astype(str).str.contains('red')).any(axis=1)]

【问题讨论】:

    标签: python-3.x pandas csv header


    【解决方案1】:

    对默认范围列 0, 1, 2skiprows=1 使用参数 header=None,如有必要,删除原始列名称:

    df_v0 = pd.concat([pd.read_csv(f, header=None, skiprows=1) for f in files])
    

    如果还想更改列名添加rename:

    dfs = [pd.read_csv(f, header=None, skiprows=1).rename(columns = lambda x: f'col_{x + 1}') 
            for f in files]
    df_v0 = pd.concat(dfs)
    

    【讨论】:

    • 另一个帮助。 files 是一个列表,其中存储了文件名列表。我有一个问题,很少文件名是大写的(例如:FILE1.CSV),很少是小写的(例如:file2.csv)。我们怎样才能把它们都变成小写。你能帮忙吗?谢谢..
    • @darkhorse - 不确定是否理解,files 返回带有大写和小写名称的文件名列表。然后循环它们并创建 DataFrame。如果将文件名更改为小写,则会引发错误 - 文件不存在。但如果真的需要它,请使用pd.read_csv(f.lower(), ...
    • 如果我没看错的话,文件名是大小写的 - 在 pandas 中读取时区分大小写。例如,如果文件名是 FILE1.CSV 并且如果我传入 file1.csv 它将失败,因为它们区分大小写。
    • 还有一个问题。我正在尝试从整个数据框(df_v0)中搜索特定文本。需要扫描所有行和列。我可以按特定列进行过滤,但不确定如何将其扩展到整个 Dataframe..
    • @darkhorse - 你真的很亲密,只删除~ like df[df.apply(lambda x: x.astype(str).str.contains('red')).any(axis=1)]
    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多