python - Pandas - 如何将字符串列转换为整数...然后转换为 10 个字符的字符串

标签 python pandas

我正在执行数据分析,其中步骤之一是通过组合多个字段来创建 key 。

不幸的是,给定字段中的位数并不总是相同。

一些信息
  • 数据类型 my_fieldobject ;
  • nan值已替换为 '-'性格。
  • 但是,基本上,my_field是文本格式的数字 (INTEGER)。
代码
import pandas as pd
import numpy as np

data ={'product': ['PA1', 'PA2', 'PA3', 'PA4', 'PA5', 'PA6', 'PA7', 'PA8'],
       'my_field': ['001', '0000000000002', '3', '04', '-', '5', '-', '6']}
df = pd.DataFrame(data)   
df
原始数据
<表类=“s-表”> <标题> 产品 我的字段 <正文> 0 PA1 001 1 PA2 0000000000002 2 PA3 3 3 PA4 04 4 PA5 - 5 PA6 5 6 PA7 - 7 PA8 6
我的方法:
df['my_field'] = np.where(df['my_field'] == '-', '-' , df['my_field'].str.zfill(10) )
df
我的输出:
<表类=“s-表”> <标题> 产品 我的字段 <正文> 0 PA1 0000000001 1 PA2 0000000000002 2 PA3 0000000003 3 PA4 0000000004 4 PA5 - 5 PA6 0000000005 6 PA7 - 7 PA8 0000000006
所需输出:
<表类=“s-表”> <标题> 产品 我的字段 <正文> 0 PA1 0000000001 1 PA2 0000000002 2 PA3 0000000003 3 PA4 0000000004 4 PA5 - 5 PA6 0000000005 6 PA7 - 7 PA8 0000000006

问题:某些输出超过 10 个字符。

最佳答案

zfill 之后进行切片怎么样,这样您将只保留最后 10 个字符:

df['my_field'] = np.where(df['my_field'] == '-', '-', df['my_field'].str.zfill(10).str[-10:])

bool 索引的替代方案:

df.loc[df['my_field'] != '-',
       'my_field'] = df['my_field'].str.zfill(10).str[-10:]

输出:

  product    my_field
0     PA1  0000000001
1     PA2  0000000002
2     PA3  0000000003
3     PA4  0000000004
4     PA5           -
5     PA6  0000000005
6     PA7           -
7     PA8  0000000006

关于python - Pandas - 如何将字符串列转换为整数...然后转换为 10 个字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73393421/

相关文章:

python - 如何从列表列表的列表转换为 pandas DataFrame

python - Beautiful Soup findAll 没有找到它们

python - 当在前一个循环中找到某个字符时,如何开始新的循环?

python - 将分类值的行放入 pandas 的列中

python - 仅在图中显示前 (n) 条的两个分类轴 (X,Y),可能是前 10 或 20 个(X 轴)唯一值

Python Pandas MultiIndex Plot 图例的颜色不正确

python - 抑制 pandas scatter_matrix 中的所有标签

python - 在python中设置对压缩文件的权限

python - 如何使用Biopython获取残留物中的原子

python - 我可以在同一个子图中绘制 pandas.DataFrame 和函数或数组中的法线吗?