【问题标题】:Reading Columns without headers阅读没有标题的列
【发布时间】:2020-08-25 18:45:07
【问题描述】:

我有一些代码可以读取某个文件夹中的所有 CSV 文件并将它们连接到一个 excel 文件中。只要 CSV 有标题,此代码就可以工作,但我想知道如果我的 CSV 没有任何标题,是否有办法更改我的代码。

以下是有效的:

path = r'C:\Users\Desktop\workspace\folder'          
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    df = df[~df['Ran'].isin(['Active'])]
  
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)
frame.drop_duplicates(subset=None, inplace=True)

这样做是删除我的 CSV 中“Ran”列下带有“Active”一词的任何行。但是,如果我没有此列的“Ran”标题,是否有其他方法可以阅读并执行相同的操作?

提前致谢!

【问题讨论】:

  • 在询问依赖数据的代码时,重要的是在您的问题中包含数据的最小示例。有时您可能想为问题创建假数据 - 只要它忠实地代表实际数据。您越容易让 us 从您的问题中复制和粘贴(以便我们可以执行您的代码并测试我们的解决方案),您获得响应的可能性就越大。 - 请阅读minimal reproducible exampledf.head() 有时对于 Pandas 的问题就足够了。

标签: python pandas csv


【解决方案1】:
 df = df[~df['Ran'].isin(['Active'])]

不是按名称选择列,而是按索引选择它。如果'Ran' 列是csv 中的第三列,则使用...

 df = df[~df.iloc[:,2].isin(['Active'])]

如果您的一些文件有标题而另一些没有,那么您可能应该先查看每个文件的第一行,然后再使用它创建 DataFrame。

for filename in all_files:
    with open(filename) as f:
        first = next(f).split(',')
        if first == ['my','list','of','headers']:
            header=0
            names=None
        else:
            header=None
            names=['my','list','of','headers']
        f.seek(0) 
        df = pd.read_csv(filename, index_col=None, header=header,names=names)

    df = df[~df['Ran'].isin(['Active'])]

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题...

    如果缺少表头,但您知道数据格式,可以将所需的列标签作为列表传递,例如:['id', 'thing1', 'ran', 'other_stuff']read_csvnames 参数中。

    根据pandas docs

    names:类似数组,可选
    要使用的列名列表。如果文件包含标题行,则应显式传递 header=0 以覆盖列名。不允许在此列表中重复。

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2011-02-04
      • 2022-11-10
      相关资源
      最近更新 更多