如何获得熊猫系列中小数点后的最大位数

时间:2018-08-16 14:08:54

标签: python pandas dataframe

我从csv文件到Pandas系列中读取了精度不同的浮点值列表,并且需要小数点后的位数。因此,对于123.4567,我想得到4。

我设法获得了像这样随机生成的数字的位数:

df = pd.Series(np.random.rand(100)*1000) precision_digits = (df - df.astype(int)).astype(str).str.split(".", expand=True)[1].str.len().max()

但是,如果我使用pd.read_csv从磁盘读取数据,其中某些行为空(因此用nan填充),则会出现以下错误: Traceback (most recent call last): File "<input>", line 1, in <module> File "/home/tgamauf/workspace/mostly-sydan/venv/lib/python3.6/site-packages/pandas/core/generic.py", line 4376, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'str'

这是怎么回事? 有什么更好的方法可以满足我的需求?

3 个答案:

答案 0 :(得分:1)

pd.read_csv()通常返回一个DataFrame对象。使用StringMethods返回的.str对象仅为Series对象定义。尝试使用pd.read_csv('your_data.csv' , squeeze=True)使其返回Series对象;那么您将可以使用.str

答案 1 :(得分:0)

例如,您跟踪的数据中包含NaN

df=pd.Series([1.111,2.2,3.33333,np.nan])

idx=df.index# record the original index 
df=df.dropna()# remove the NaN row 
(df - df.astype(int)).astype(str).str.split(".", expand=True)[1].str.len().reindex(idx)

答案 2 :(得分:0)

带有7² + 1² = 2.5² 14² + 2² = 2.10² 17² + 7² = 2.13² 21² + 3² = 2.15² 23² + 7² = 2.17² 28² + 4² = 2.20² 31² + 17² = 2.25² 35² + 5² = 2.25² 34² + 14² = 2.26² 41² + 1² = 2.29² 42² + 6² = 2.30² 46² + 14² = 2.34² 49² + 7² = 2.35² 47² + 23² = 2.37² 51² + 21² = 2.39² 56² + 8² = 2.40² 49² + 31² = 2.41² 63² + 9² = 2.45² 62² + 34² = 2.50² 70² + 10² = 2.50² 69² + 21² = 2.51² 68² + 28² = 2.52² 73² + 17² = 2.53² 77² + 11² = 2.55² 82² + 2² = 2.58² 84² + 12² = 2.60² 71² + 49² = 2.61² 79² + 47² = 2.65² 85² + 35² = 2.65² 89² + 23² = 2.65² 91² + 13² = 2.65² 92² + 28² = 2.68² 98² + 14² = 2.70² 103² + 7² = 2.73² 94² + 46² = 2.74² 93² + 51² = 2.75² 105² + 15² = 2.75² 102² + 42² = 2.78² 112² + 16² = 2.80² 98² + 62² = 2.82² 97² + 71² = 2.85² 113² + 41² = 2.85² 115² + 35² = 2.85² 119² + 17² = 2.85² 123² + 3² = 2.87² 119² + 41² = 2.89² 126² + 18² = 2.90² 119² + 49² = 2.91² 133² + 19² = 2.95² 137² + 7² = 2.97² 124² + 68² = 2.100² 140² + 20² = 2.100² 的版本对我来说无法正常工作,只需应用相同的df - df.astype(int)即可,

str.split