python - 取 Pandas Column 的前 6 位数字

标签 python pandas dataframe

我的任务是获取 pandas 中一列的前 6 位数字。但是,如果该数字长度小于 6 位,则会在数字末尾添加一个小数。不幸的是,这对于我以后的需求来说是 Not Acceptable 。

我确信我可以用各种代码去掉小数,但随着 DataFrame 变大,它可能会效率低下。

当前代码:

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
                    'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
                    'C' : [10,0,30,50,0,0,4,10,1,0], 
                    'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
                    'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})

wow2 = df1
wow2['D'] = wow2['D'][:6]
print(wow2)

     A    B   C       D           E
0  NaN  1.0  10  123456      Assign
1  NaN  0.0   0  123456    Unassign
2  3.0  3.0  30  123456      Assign
3  4.0  5.0  50  123456        Ugly
4  5.0  0.0   0  12345.  Appreciate <--- Notice Decimal
5  5.0  0.0   0  12345.        Undo <--- Notice Decimal
6  3.0  NaN   4     NaN      Assign
7  1.0  9.0  10     NaN    Unicycle
8  5.0  0.0   1     NaN      Assign
9  NaN  0.0   0     NaN     Unicorn

如果长度不超过6,有没有办法保留数字?我考虑过将列转换为字符串并执行循环...但我相信这会非常低效创造的问题多于解决方案

最佳答案

要获取数字的前 6 位(无需转换为字符串并返回),您可以使用模 operator 。 为了将数值表示为非 float ,您需要将它们转换为整数。但是,在同一列中混合整数和 np.NaN 将导致 float64(有关更多信息,请参阅 here)。为了解决这个问题(这有点难看),您需要将整数转换为字符串,这会强制数据类型为object,因为您混合了字符串和浮点值。

解决方案如下所示:

wow2['D'] = wow2['D'].mod(10**6)\
   .dropna()\
   .astype(int)\
   .astype(str)

print(wow['D'])

0    123456
1    123456
2    234567
3    345678
4     12345
5     12345
6    345678
7    456789
8    234567
9       NaN
Name: D, dtype: object

关于python - 取 Pandas Column 的前 6 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442408/

相关文章:

r - 将 R 数据帧插入 SQL (RODBC) - 找不到错误表

python - 如何在 python 中解析 JSON 日期时间字符串?

Python基于2个类属性进行排序

python - 登录 Django 时帐户未进行身份验证

python - 根据同一行其他列中的值将函数应用于数据框列元素?

R:在没有 for 循环的情况下将 "short form"数据转换为 "long form"数据?

python - 使用qcachegrind处理profilestats输出时如何源注释python

python - 如何使用python将重复的行移动到列中

python - 将多个值拆分为新行

python - 使用从 Postgres 中提取的数据框在 Python 中创建计算列(使用 If 语句)