pandas读取excel后,某一列的字符串不能读出的处理方法

使用pandas读取excel文件config;文件中的cardlist页面中,有约132条会员卡信息;

CONFIG = "config.xlsx",文件中数据格式:

目的:获取”卡号“一列后,在需要的时候,判断某个字符串类型的卡号是否在config文件存在?

1、出现的问题: "66601854"这个卡号是在文件中的,但是使用如下代码,却得到False的反馈

cardlist = pd.read_excel(CONFIG, sheet_name="cardlist",index=False)

df = cardlist.loc[:,"卡号"]

print(df)

使用了以下几种方式,均得不到正确的结果(测试卡号均在文件中)

print("66601251" in df)               :  结果 False
print("66601251" in df.tolist())    :  结果 False
print("99001063" in df.tolist())    :  结果 False
print("66601854” in df.tolist())    :  结果 False

考虑到可能是数据类型的问题后,使用如下方式转换类型后,结果却十分诡异:printf(df)打印出来的几个卡号,是可以得到正确结果,但是没有打印出来的卡号,却查询不到:
print("66601251" in str(df))   :  结果 True
print("66601854" in str(df))   :  结果 False

--------------------------------------------------------------------------------------

2、解决方案:

最后,在多方求证后,确认是数据类型的问题,但是转换类型的方式不正确,但是转换的方式,需要以DataFram整体来进行转换:

方式1:在使用的时候,转换为类型为str,并使用tolist()函数;
df = cardlist.loc[:,"卡号"]
print("66601854" in df.astype(str).tolist())

方式2:在获取数据时,即刻将数据类型进行转换:
df = cardlist.loc[:,"卡号"].astype(str)
print("66601854" in df.tolist())

 

如果Excel表格中存在多行数字和多行汉字交叉的情况,可以使用Pandas库中的read_excel()函数进行读取。默认情况下,Pandas会将所有数字读取为浮点数,将所有文本读取字符串。 例如,如果我们有以下的Excel表格: | 列1 | 列2 | 列3 | | --- | --- | --- | | 1 | A | 2 | | B | 2 | C | | 3 | D | 4 | 我们可以使用如下代码读取: ```python import pandas as pd df = pd.read_excel('data.xlsx') print(df) ``` 输出结果为: ``` 列1 列2 列3 0 1 A 2 1 B 2 C 2 3 D 4 ``` 可以看到,Pandas将所有数字读取为浮点数,将所有文本读取字符串。 如果我们需要将数字和文本分别读取出来,可以使用Pandas库中的converters参数来自定义转换函数。例如,我们可以编写一个函数,将所有非数字字符替换为空字符串,然后将结果转换为浮点数: ```python import pandas as pd def clean_number(x): if isinstance(x, str): x = x.replace(',', '') # 去掉逗号分隔符 x = ''.join(filter(str.isdigit, x)) # 只保留数字 return float(x) if x else None df = pd.read_excel('data.xlsx', converters={'列1': clean_number, '列3': clean_number}) print(df) ``` 输出结果为: ``` 列1 列2 列3 0 1.0 A 2.0 1 NaN 2 NaN 2 3.0 D 4.0 ``` 以上代码中,我们使用了isinstance()函数来判断单元格中的值是否为字符串类型,然后使用replace()函数和filter()函数来去掉逗号分隔符和非数字字符。最后,我们将结果转换为浮点数并返回。在read_excel()函数中,我们使用了converters参数来指定需要使用的转换函数,其中'列1'和'列3'是需要处理的列的名称。这样,就可以将数字和文本分别读取出来了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值