我从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'
这是怎么回事? 有什么更好的方法可以满足我的需求?
答案 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