【问题标题】:Handling .csv files that starts with "sep= " at the begining using Pandas read_csv()使用 Pandas read_csv() 处理开头以“sep=”开头的 .csv 文件
【发布时间】:2020-10-10 05:57:25
【问题描述】:

我有一个带有制表符分隔的 .csv 文件,当您使用记事本打开时,该文件如下所示(您在记事本中看到的空间实际上是制表符 (\t):

sep = 
Time Val1 Val2
00:01 10 20

"sep=" 是为了让 excel 可以正确读取 .csv 文件。问题是,当您尝试使用 read_csv 打开它时,它会返回一个名为“s”的列的单列数据框。如果我用 Excel 打开文件并双击第一列宽度以具有自动宽度,保存并关闭,则文件正确格式化为逗号分隔。当您使用记事本打开文件时,文件开头不再有“sep=”,然后 Pandas 会正确读取所有列和值。

在有人问之前: 1. 我尝试使用以下方法删除第一行:

with open(csvFileName, mode="rU") as infile:
with open(csvFileName, mode="r") as infile:

要么删除第一行,要么将 "\t" 替换为 "," 并将其写回另一个文件,但都不起作用。 2.我也尝试检测和使用不同的编码方案,所以编码不是问题。 3.文件使用lineterminator = \n,我用那个参数读取 4.我用skiprows=0跳过第一行,没用 5.我尝试设置header = 1指向它有标题的行,并设置sep=\t,它正确读取列数和行数,但列名是“UnnamedXYZ”,值都是NaNs

任何想法都值得赞赏!

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    如果要使用第一行中的分隔符值来解析 csv:

    来自 data.csv 的输入:

      sep = ,
      Year Dec Jan
         1  50  60
         2  25  50
         3  30  30
         4  40  20
         5  10  10
    

    将文件读入列表,并保存到数据框中:

    x = []
    sep = ''
    with open(filename) as f:
        for i, line in enumerate(f):
            if i == 0:
                sep = line.rstrip()[-1]
            if i > 0:
                x.append(line.rstrip().split(','))
    x = pd.DataFrame(data=x[1:], columns=x[0])
    

    x

      Year Dec Jan
    0    1  50  60
    1    2  25  50
    2    3  30  30
    3    4  40  20
    4    5  10  10
    

    如果没有分隔符,或者分隔符字段为空,或者分隔符在 csv 的后续行中不存在,您应该添加更多逻辑来处理。

    【讨论】:

    • 这行得通,谢谢!只需稍作调整即可将sep 中的split 中的“,”替换为split
    【解决方案2】:

    阅读docs 使用skirows。

    类似skiprowslist,int或可调用,可选

    Line numbers to skip (0-indexed) or number of lines to skip (int) at the start of the file.
    
    If callable, the callable function will be evaluated against the row indices, returning True if the row should be skipped and False
    

    否则。一个有效的可调用参数的例子是 lambda x: x 在 [0, 2] 中。

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多