如何在熊猫列中舍入/删除“ .0”零值?

med*_*v21 7 python pandas

我正在尝试查看是否可以从此电话号码栏中删除结尾的零。

例:

0
1      8.00735e+09
2      4.35789e+09
3      6.10644e+09
Run Code Online (Sandbox Code Playgroud)

此列中的类型是一个对象,我尝试将其取整,但出现错误。我检查了其中的几个,我知道它们的格式为“ 8007354384.0”,并希望除去带小数点的尾随零。

有时我会收到这种格式,有时却没有,它们将是整数。我想检查一下phone列是否有尾随零,然后将其删除。

我有这段代码,但我坚持如何检查每一行的尾随零。

data.ix[data.phone.str.contains('.0'), 'phone']
Run Code Online (Sandbox Code Playgroud)

我收到一个错误=> *** ValueError: cannot index with vector containing NA / NaN values。我认为问题是因为某些行有空数据,有时我确实收到了。上面的代码应该能够跳过空行。

有人有什么建议吗?我是熊猫的新手,但到目前为止它是一个有用的库。您的帮助将不胜感激。

注意 上面提供的示例中,第一行包含一个空数据,有时我会这样做。只是要确保此电话号码未将其表示为0。

同样,空数据也被认为是字符串,因此如果行为空,则它是浮点数和字符串的混合。

Ken*_*Wei 10

在 Pandas/NumPy 中,整数不允许采用 NaN 值,并且数组/系列(包括数据帧列)的数据类型是同质的——因此有一列整数,其中某些条目是None/np.nan是完全不可能的

编辑:data.phone.astype('object') 应该可以解决问题;在这种情况下,熊猫把你列了一系列通用的Python对象,而不是特定的数据类型(如str/ float/ int),以性能为代价,如果你打算(在你的情况可能不会)运行任何重计算这个数据.

假设您想保留这些 NaN 条目,您转换为字符串的方法是一种有效的可能性:

data.phone.astype(str).str.split('.', expand = True)[0]

应该给你你正在寻找的东西(你可以使用替代的字符串方法,比如.replaceor .extract,但.split在这种情况下似乎是最直接的)。

或者,如果您只对浮点数的显示感兴趣(我认为不太可能),您可以这样做pd.set_option('display.float_format','{:.0f}'.format),这实际上不会影响您的数据。


ern*_*cyp 9

import numpy as np
import pandas as pd

s = pd.Series([ None, np.nan, '',8.00735e+09,  4.35789e+09, 6.10644e+09])

s_new = s.fillna('').astype(str).str.replace(".0","",regex=False)
s_new
Run Code Online (Sandbox Code Playgroud)

这里我用空字符串填充null值,将series转换为字符串类型,.0用空字符串替换。
这输出:

0              
1              
2              
3    8007350000
4    4357890000
5    6106440000
dtype: object
Run Code Online (Sandbox Code Playgroud)


piR*_*red 7

使用 astype(np.int64)

s = pd.Series(['', 8.00735e+09, 4.35789e+09, 6.10644e+09])
mask = pd.to_numeric(s).notnull()
s.loc[mask] = s.loc[mask].astype(np.int64)
s

0              
1    8007350000
2    4357890000
3    6106440000
dtype: object
Run Code Online (Sandbox Code Playgroud)


小智 7

cs95 的这个答案在一行中删除了尾随的“.0”。

df = df.round(decimals=0).astype(object)
Run Code Online (Sandbox Code Playgroud)


Нек*_*кто 6

做就是了

data['phone'] = data['phone'].astype(str)          
data['phone'] = data['phone'].str.replace('.0', ' ')
Run Code Online (Sandbox Code Playgroud)

它对列中的所有条目使用正则表达式样式查找,并用空格替换任何“.0”匹配项。例如

data = pd.DataFrame(
    data = [['bob','39384954.0'],['Lina','23827484.0']], 
    columns = ['user','phone'], index = [1,2]
)

data['phone'] = data['phone'].astype(str)
data['phone'] = data['phone'].str.replace('.0', ' ')
print data

   user     phone
1   bob  39384954
2  Lina  23827484
Run Code Online (Sandbox Code Playgroud)

  • 我必须在 str.replace 函数中指定可选参数 regex=False 。默认的真值是替换所有的 1 和 0。 (3认同)