pd.csv_read 由于第 2 行导入时逗号和点出现问题,不知道为什么?

pd.csv_read Problem with comma & dot when import because of the 2nd line, no idea WHY?

我有一个 .txt 文件(23820 行 × 300 列)。它是 '\t' 分隔的,小数是 ','

当用 csv_read 读取它时,我文件中几乎每一列都应该是 float,但它完全搞砸了。我没有得到 float 数据(其中有一个小数点)但是像 '25,73234' 这样的字符串 这导致我在尝试转换时遇到问题。查看错误信息:

ValueError                                Traceback (most recent call last)
<ipython-input-3-87b4fe6976d1> in <module>
----> 1 DF['T Ans v F_deg_C'] = [float(x) for x in DF['T Ans v F_deg_C']]

<ipython-input-3-87b4fe6976d1> in <listcomp>(.0)
----> 1 DF['T Ans v F_deg_C'] = [float(x) for x in DF['T Ans v F_deg_C']]

ValueError: could not convert string to float: '25,79243'

这是导入后我的DF的截图:

DF 示例:

我可以跳过前 2 行并且数据很好但是我想将第 1 行和第 2 行按元素放在一起作为我的 DF 的 header。我知道我可以分别读取 header 和数据。我也可以在导入后更改数据,将 ',' 替换为 '.',然后再将字符串更改为在每一列中浮动,但我仍然想知道那里发生了什么。

现在这是我自己无法回答的问题。我发现是第二行导致了我的问题。在寻找答案时,我经常读到有关误解 '\n' 或正则表达式的信息,因此我打印了第二行,包括格式的每一部分:

with open(data_path) as f:
    my_list = list(f)
my_list[1]

'yymmdd\thh:mm:ss\trpm\tNm\tkW\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\t°C\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tbar\tbar\tmbar\tmbar\tmbar\tkg/h\t%\tkg\tg/h\tkg/h\tl/min\tppm\tppm\tppm\tppm\tppm\tppm\t%\tppm\t%\tppm\tppm\tppm\t%\tppm\t%\tppm\tppm\tppm\t%\tppm\t%\tNm\tkW\tkW\tppm\tppm\tppm\tg/h\tg/h\tg/h\tg/kWh\tg/kWh\tg/kWh\t%\t%\t%\tg/h\tg/h\tg/h\tg/kWh\tg/kWh\tg/kWh\tg/h\tg/h\tg/h\tg/kWh\tg/kWh\tg/kWh\tg/h\tg/h\tg/h\tg/kWh\tg/kWh\tg/kWh\tg/kWh\tg/kWh\tg/kWh\tkg/h\tg/kg\t°C\t-\t-\t-\t-\t-\tg/kWh\tg/kWh\tbar\t-\t-\t-\t-\tkPa\tmbar\tmbar\tmg/l\tmg/l\t-\tkWh\t°C\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\tmbar\t?\t?\tcbm\t1\t\t?\t?\t\t\t\t\t\t?\t?\t?\t?\t?\t?\t?\t?\t?\t?\t?\t\t?\t?\t?\t?\t1\t1\t1\t1\t1\tppm\t\t1\tmg/Asp\t1\t\tbar\tbar\tbar\tbar\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\t%\t°C\tbar\t°C\t1\t°C\t°C\t°C\t\tmbar\tmbar\tppm\t°C\tbar\t°C\tbar\tbar\tppm\t°C\t\t°C\t1/min\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\tkg/s\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1\t1,0\t1,0\t1,0\t1,0\t1,0\t1,0\t1,0\tkW\t1,0\t1,0\t1,0\tppm\t1,0\t1,0\tg/s\t1,0\t1,0\t1,0\tppm\tppm\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n'

第 2 行代表 header 的单位。有人可以向我解释为什么这条线会导致我的问题吗?

在函数调用中添加 header=[0,1] 怎么样?这将文件中的前两行指定为 header.

你的情况:pd.read_csv(data_path, delimiter='\t', decimal=',', header=[0,1])