编辑 - 由于我遇到的问题我决定最好的办法是检查列的长度是否为10位数,第一个字符是0,剥离0。任何人都有一个有效的方法吗?这是我到目前为止所想的。第二次编辑 - 我认为这是有效的。我仍然不明白为什么在某些日期文件中有前导0,当我将其作为对象阅读时,如果有人可以教育我。
aht [' ivr_session'] = aht [' ivr_session_id']。astype(str).apply(lambda x:np.where(((len(x)== 10 )&(x [0] ==' 0')),x.lstrip(' 0'),x))
原始问题: 我的原始数据中有一列长度为9位,但如果我用dtype = {session_id:object}读取csv,则会突然显示前导0。
这是字符长度的value_count:
10 240392
9 10316
Name: session_id, dtype: int64
奇怪的是,如果我删除了dtype参数(这意味着pandas将数据推断为float):
9 211451
10 39248
Name: ivr_session_id, dtype: int64
如果我在Excel中打开.csv文件并计算字符长度,则为9.什么导致在pandas中生成此前导0?实际列长度为9个字符。我试图将这个9位数的session_id与另一个具有相同密钥的文件合并。如果熊猫认为有10个字符,那么它将无法正常加入。
更疯狂的是,即使我没有将文件作为对象读取,本月1月11日和12日的数据仍显示10个字符。 csv显示9个字符。老实说,我不知道为什么两天都不正确,一切看起来都一样。
当float转换为字符串时,这会删除小数。原始数据在datetime列的末尾也填充了0,所以我也需要删除它们(解析日期有没有办法解决这个问题?)aht['session_id'] = aht['session_id'].astype(str).map(lambda x: x.split('.')[0])
aht['call_start'] = aht['call_start'].astype(str).map(lambda x: x.split(':000')[0])
aht['call_end'] = aht['call_end'].astype(str).map(lambda x: x.split(':000')[0])