我的原始 CSV 文件在每个单元格中都有浮点值,但在我使用
pd.read_csv()
读取文件后,它返回一个空白表格。我尝试设置函数的分隔符和编码,但它根本没有帮助。
CSV文件是由软件自动生成的,我无法检查设置的设置。
有什么方法可以将我的文件读取到具有正确值的数据帧吗?
>>> pd.read_csv('./HISTORY_LOG_05-31-2018.CSV')
D Unnamed: 1 Unnamed: 2 ... Unnamed: 108 Unnamed: 109 Unnamed: 110
0 NaN NaN NaN ... NaN NaN NaN
1 NaN NaN NaN ... NaN NaN NaN
2 NaN NaN NaN ... NaN NaN NaN
3 NaN NaN NaN ... NaN NaN NaN
4 NaN NaN NaN ... NaN NaN NaN
5 NaN NaN NaN ... NaN NaN NaN
[6 rows x 111 columns]
我将 CSV 文件简化为
A,B
0.000,0.000
0.000,0.000
我仍然得到如下结果:
>>> pd.read_table('./HISTORY_LOG_05-31-2018.CSV', encoding="cp1252")
D
0 NaN
1 NaN
2 NaN
>>> pd.read_table('./HISTORY_LOG_05-31-2018.CSV', encoding="cp1252", delimiter=",")
D Unnamed: 1
0 NaN NaN
1 NaN NaN
2 NaN NaN
所以,我找到了答案,因为我也遇到了同样的问题。我的编码错误,因此无法正确读取文本。我在 Visual Studio Code 中打开它,发现编码是 UTF-16 LE。我的输出来自 powershell,所以你的输出可能也是如此,你可能只需要指定输出编码或更改 panda 的编码。
pd.read_csv("ADSearch.txt",encoding='UTF-16 LE')
Empty DataFrame
Columns: [lastname, firstname, username, site, email, Unnamed: 5, False, True]
Index: []
我发现了这个问题,以下是一些诊断步骤:
首先使用命令行检查文件是否可读:
head file.txt
之后在 python3 控制台中尝试打印一些行:
with open("file.txt", encoding="latin1", errors='ignore') as f:
for i in f:
print([str(i.strip())])
如果您看到十六进制格式的行,即
\x00N\x00A\x00S\x00S\x00A\x00U\x00"\x00;
,则表示源文件中存在空字符。因此,要删除它们,只需按照here所述
sed -i 's/\x0//g' file.txt
,然后再次在Python中加载文件。
与您提供的示例输入完美配合
还显示了示例输入
还显示了 Python 和 pandas 的版本
~ $ python
Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> pd.read_csv('sample.csv')
A B
0 0.0 0.0
1 0.0 0.0
>>> pd.__version__
'0.22.0'
>>> exit()
~ $ cat sample.csv
A, B
0.000, 0.000
0.000, 0.000
我的问题是最左边的两列完全是空的,而且我的数据实际上是从 CSV 中的第 3 列开始的。结果,解析器会解析 NaN 的所有内容。编码 UTF 的答案对我来说是一个转移注意力的话题。我删除了最左边的两列,数据读取得很好。