Python Pandas dataframe read csv提供值中的隐藏字符

Python Pandas dataframe read csv提供值中的隐藏字符,python,pandas,csv,Python,Pandas,Csv,我试着阅读这个网站提供的CSV,它通常用于构建RecComedation系统。我使用了BX-Books.csv和BX-Book-Ratings.csv。这是BX-Books.csv的示例 "ISBN";"Book-Title";"Book-Author";"Year-Of-Publication";"Publisher";"Image-URL-S";"Image-UR

我试着阅读这个网站提供的CSV,它通常用于构建RecComedation系统。我使用了BX-Books.csv和BX-Book-Ratings.csv。这是BX-Books.csv的示例

"ISBN";"Book-Title";"Book-Author";"Year-Of-Publication";"Publisher";"Image-URL-S";"Image-URL-M";"Image-URL-L"
"0195153448";"Classical Mythology";"Mark P. O. Morford";"2002";"Oxford University Press";"http://images.amazon.com/images/P/0195153448.01.THUMBZZZ.jpg";"http://images.amazon.com/images/P/0195153448.01.MZZZZZZZ.jpg";"http://images.amazon.com/images/P/0195153448.01.LZZZZZZZ.jpg"
"0002005018";"Clara Callan";"Richard Bruce Wright";"2001";"HarperFlamingo Canada";"http://images.amazon.com/images/P/0002005018.01.THUMBZZZ.jpg";"http://images.amazon.com/images/P/0002005018.01.MZZZZZZZ.jpg";"http://images.amazon.com/images/P/0002005018.01.LZZZZZZZ.jpg"
以及BX-Book-Ratings.csv

"User-ID";"ISBN";"Book-Rating"
"276725";"034545104X";"0"
"276726";"0155061224";"5"
"276727";"0446520802";"0"
我尝试用以下代码读取两个文件:

Books = pd.read_csv(r"C:\Users\Yosafat VS\PycharmProjects\Recomendation_KNN\Data\BX-Books.csv", sep=';', error_bad_lines=False, encoding="latin-1")
Ratings = pd.read_csv(r"C:\Users\Yosafat VS\PycharmProjects\Recomendation_KNN\Data\BX-Book-Ratings.csv", sep=';', error_bad_lines=False, encoding="latin-1")
当我试图检查数据时,我发现两个csv上的一些ISBN加载错误(应该不是ISBN代码),如下所示

        count
ISBN
_____________   
0330299891  2
0375404120  2
0586045007  1
9022906116  2
9032803328  1
...     ...
cn113107    1
ooo7156103  1
§423350229  1
´3499128624     1
Ô½crosoft   1
但当我检查CSV时,我没有发现数据有任何问题,ISBN似乎是正确的。但是,csv中的每个值都用双引号括起来,BX-Book.csv使用ANSI而不是UTF-8。使用UTF-8的BX图书评级

这就是为什么当我尝试将数据透视的BX图书评级映射到BX图书时,会出现错误:

KeyError: "None of [Index([' 0330299891', ' 0375404120', ' 9022906116', '*0452281903',\n       '+0451197399', '0 7336 1053 6', '0 907 062 008', '0*708880258',\n       '00000000', '000000000',\n       ...\n       'O77O428452', 'O786001690', 'O805063196', 'O9088446X', 'O971880107',\n       'SBN425037452', 'X000000000', 'XXXXXXXXXX', 'ZR903CX0003',\n       '`3502103682'],\n      dtype='object', name='ISBN', length=135794)] are in the [index]"

实际上,csv和csv中都存在密钥,有时我们会发现一些拼图编码问题,大多数时候我们可以忽略它,因为这些行很少

我们可以使用
open
来处理该作业

file='BX Books.csv'
以“打开”(文件,errors='ignore')作为fr:
数据=fr.read()
df=pd.read_csv(io.StringIO(数据),sep=';',error_bad_lines=False)
结果:

# BX-Book-Ratings.csv  (1149780, 3) -> filelines 1149781
# BX-Books.csv         (271360, 8)  -> filelines 271380
科尔斯:


此特定示例的另一个解决方案:

file='BX Books.csv'
以“打开”(文件,errors='ignore')作为fr:
数据=fr.read()
data\u list=data.strip().split('\n')
obj=pd.系列(数据列表)
obj=obj.str.strip(“”)
dfn=obj.str.split(“;”,expand=True)
dfn.columns=dfn.iloc[0]
dfn.drop(0,原地=真)
dfn形状:

# BX-Books.csv         (271379, 8)  -> filelines 271380(with a header row)

# BX-Books.csv         (271379, 8)  -> filelines 271380(with a header row)