ValueError: invalid literal for int() with base 10: '"034545104X"' Pandas Dataframe

ValueError: invalid literal for int() with base 10: '"034545104X"' Pandas Dataframe

ratings["isbn"] = ratings["isbn"].astype(int)

我在尝试将列转换为整数格式进行分析时遇到此错误。我什至尝试替换 isbn 列中的引号和 X。即便如此我还是收到错误。

ratings_data['isbn'] = ratings_data['isbn'].replace({'"':''}, regex=True)
ratings_data['isbn'] = ratings_data['isbn'].replace({'X':''}, regex=True)

问题是还有许多其他字符串,例如 X,您可以找到所有 ISBN 非仅以 X 结尾且没有数字:

ratings_data = pd.read_csv('BX-Book-Ratings.csv', sep=';')
# print(ratings_data.head(10))

df = ratings_data[~ratings_data['ISBN'].str.contains(r'^\d+$|^\d+X$')]
print(df)
         User-ID           ISBN  Book-Rating
54        276762     B0000BLD7X            0
55        276762    N3453124715            4
384       276884     B158991965            6
535       276929  2.02.032126.2            0
536       276929  2.264.03602.8            0
         ...            ...          ...
1146393   275970     014014904x            0
1147650   276009    01400.77022            0
1147916   276046     08348OO799           10
1148549   276331   32534220"            9
1149066   276556     055337849x           10

[3092 rows x 3 columns]

可能的解决方案是仅使用 X 或数字过滤数据进行处理:

ratings_data = pd.read_csv('BX-Book-Ratings.csv', sep=';')
# print(ratings_data.head(10))

ratings_data = ratings_data[ratings_data['ISBN'].str.contains(r'^\d+$|^\d+X$')]
print(ratings_data)
         User-ID         ISBN  Book-Rating
0         276725   034545104X            0
1         276726   0155061224            5
2         276727   0446520802            0
3         276729   052165615X            3
4         276729   0521795028            6
         ...          ...          ...
1149775   276704   1563526298            9
1149776   276706   0679447156            0
1149777   276709   0515107662           10
1149778   276721   0590442449           10
1149779   276723  05162443314            8

[1146688 rows x 3 columns]

ratings_data['ISBN'] = ratings_data['ISBN'].replace({'X':''}, regex=True).astype(np.int64)
print(ratings_data)
         User-ID        ISBN  Book-Rating
0         276725    34545104            0
1         276726   155061224            5
2         276727   446520802            0
3         276729    52165615            3
4         276729   521795028            6
         ...         ...          ...
1149775   276704  1563526298            9
1149776   276706   679447156            0
1149777   276709   515107662           10
1149778   276721   590442449           10
1149779   276723  5162443314            8

[1146688 rows x 3 columns]