我在csv原始数据文件中遇到EM Dash问题,导致熊猫无法读取csv。
我在下面运行了一些变体
datalocation = filepath
df = pd.read_csv(datalocation)
收到错误:“UnicodeDecodeError:“ascii”编解码器无法解码位置4:序号不在范围(128)中的字节0xef”
其他变化包括
df = pd.read_csv(datalocation, encoding='utf-8')
df = pd.read_csv(datalocation, encoding='utf-16')
收到错误:“UnicodeDecodeError:'utf8'编解码器无法解码位置0中的字节0xff:无效的开始字节”
df = pd.read_csv(datalocation, na_values=['—'])
收到错误:“行包含空字节”
如果成功,dataframe应该类似于下面的示例表。
+---------+------+----------+--------+
| Country | Date | Delivery | Region |
+---------+------+----------+--------+
| a | — | 10 | foo |
| b | — | 30 | — |
| c | 2 | —50 | foo— |
| — | — | 20 | —bar |
| a | — | 40 | bar— |
| — | — | —6— | bar |
| b | — | 90— | foo |
| c | — | 70 | bar |
| a | — | 80 | foo |
| c | — | 100 | foo— |
+---------+------+----------+--------+
在花时间研究了这些资源之后,我了解到这与Unicode/UTF-8/ASCII之间的一些冲突有关。
是否有办法在运行“pd”之前移除所有EM破折号。读_csv'?请记住,我不知道csv原始文件中所有EM破折号的精确单元格。
在读取数据集之前,通过将数据集预处理到一个新文件中,最终解决了如何做到这一点!希望与遇到此问题的任何人分享该方法。
import os, re
import pandas as pd
EMDASH = '—'
with open('scrubbed_file','wt') as outfile:
with open('original_file_location','rt') as infile:
for line in infile:
outfile.write(re.sub(EMDASH,'-',line))
df = pd.read_csv('scrubbed_file', engine='python',
encoding='utf_16_le',
names=['Country', 'Date', 'Delivery', 'Region'],
delimiter='\t',
quotechar='"',
skiprows=2, skip_footer=2, thousands = ',')
希望这能帮助那些在数据框中遇到问题字符的人。
Python是如何将CSV文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)? 我的CSV文件有以下内容: 在R中,我们将使用以下方法读取此文件: 这将返回一个R数据。框架: 有没有类似python的方法来获得相同的功能?
问题内容: 如果“文件名”不存在,我想使用pd.write_csv写入“文件名”(带有标题),否则,如果存在“文件名”,则附加到文件名中。如果我只使用命令: 写入或追加成功,但似乎每次进行追加时都会写入标头。 如果文件不存在,如何只添加标题,如果文件存在,如何不添加标题而追加标题? 问题答案: 不确定熊猫是否有办法,但是检查文件是否存在将是一种简单的方法:
问题内容: 我正在编写一个脚本,以将带有标头的大.xlsx文件减少到一个csv中,然后根据标头名称仅写有所需列的新csv文件。 我得到的错误是最后一部分代码,它说 我确定我忽略了一些愚蠢的事情,但是我已经阅读了熊猫网站上的to_csv文档,但我仍然感到茫然。我知道我使用了不正确的to_csv参数,但我似乎无法理解我猜的文档。 任何帮助表示赞赏,谢谢! 问题答案: 选择特定列的方法是这样的-
问题内容: 使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas DataFrame的最佳方法是什么。 使用此代码: 产生以下错误 问题答案: 在read_csv()中提供列名列表应该可以解决问题。 例如:names = [‘a’,’b’,’c’,’d’,’e’] https://github.com/pydata/pandas/issues/2981 编辑:如果您不想提供列名,
根据我对左向外连接的理解,结果表的行永远不会比左表多...请让我知道如果这是错的... 我的左表是192572行8列。 我右边的表格是42160行和5列。 我的左表有一个名为“id”的字段,它与我的右表中名为“key”的列相匹配。 因此,我将它们合并为: 但是然后组合的形状是236569。 我有什么误会?