Python 如何获取系列小数点后的最大位数
我从csv文件中读取了一系列精度不同的浮点值,并需要小数点后的位数。所以,对于123.4567,我想得到4 我设法获得了随机生成的数字的位数,如下所示:Python 如何获取系列小数点后的最大位数,python,pandas,dataframe,Python,Pandas,Dataframe,我从csv文件中读取了一系列精度不同的浮点值,并需要小数点后的位数。所以,对于123.4567,我想得到4 我设法获得了随机生成的数字的位数,如下所示: df=pd.系列(np.随机.兰德(100)*1000) 精度\数字=(df-df.astype(int)).astype(str.str.split(“.”,expand=True)[1].str.len().max() 但是,如果我使用pd.read_csv从磁盘读取数据,其中一些行是空的(因此填充了nan),则会出现以下错误: 回溯
df=pd.系列(np.随机.兰德(100)*1000)
精度\数字=(df-df.astype(int)).astype(str.str.split(“.”,expand=True)[1].str.len().max()
但是,如果我使用pd.read_csv从磁盘读取数据,其中一些行是空的(因此填充了nan),则会出现以下错误:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/tgamauf/workspace/mostary sydan/venv/lib/python3.6/site packages/pandas/core/generic.py”,第4376行,位于__
返回对象。\uuuGetAttribute(self,name)
AttributeError:“DataFrame”对象没有属性“str”
这里出了什么问题?
有没有更好的方法来满足我的需要?例如,您有以下数据,其中包含
NaN
df=pd.Series([1.111,2.2,3.33333,np.nan])
pd.read\u csv()
通常返回一个DataFrame
对象。使用.str
返回的StringMethods
对象仅为系列
对象定义。尝试使用pd.read\u csv('your\u data.csv',squeak=True)
让它返回一个系列
对象;然后,您将能够使用.str带有df-df.astype(int)
的版本对我来说无法正常工作,只需应用相同的str.split
即可:
def get_max_decimal_length(df):
"""Get the maximum length of the fractional part of the values or None if no values present."""
values = df.dropna()
return None if values.empty else values.astype(str).str.split(".", expand=True)[1].str.len().max()
您可以预先填充缺少的值missingfillna
以防止错误发生,不是吗?squeak=True
修复了该问题,但我注意到,如果加载整个数据帧,然后选择单个列(无论如何我都需要这样做),它甚至不适用。在这种情况下,它实际上是开箱即用的。无论如何,谢谢你,因为这确实回答了我提出的问题!.reindex(idx)
在这里做什么?如果使用.max()或.reindex(idx).max(),则当前数据集的结果相同。
def get_max_decimal_length(df):
"""Get the maximum length of the fractional part of the values or None if no values present."""
values = df.dropna()
return None if values.empty else values.astype(str).str.split(".", expand=True)[1].str.len().max()