2017-08-15 18 views
2

我有其中有不同数据类型的数据帧。 我想确定浮点类型的精度。 我可以用这个代码只选择float64:单元格操作数据帧,确定精度

df_float64 = df.loc[:, df.dtypes == np.float64] 

(不知道为什么与列只有“南”值也将被选中,但是这仅仅是侧面说明)

我们确定紧靠如此精确我的事方法:

precision = len(cell.split(".")[1] 

如果cell将是一个字符串。

并以每列最高精度的csv格式输出。

因此,有这样的数据帧:

|  A|  B|  C|  D| 
| 0.01|0.0923| 1.0| 1.2| 
| 100.1| 203.3| 1.093| 1.9| 
| 0.0| 0.23| 1.03| 1.0| 

我想有这样的:

|  A|  B|  C|  D| 
|  2|  4|  3|  1| 

这可能使用熊猫?

感谢

回答

1

您可以使用:

  • fillna首先为删除NaNs
  • 投地str由列astype
  • 环路由applylist comprehension与lambda函数
  • 为每列split,获得列表的第二个值str[1]并获得len
  • 得到max值 - 输出Series
  • 转换Series一个数据帧,如果necessery

a = df.fillna(0).astype(str).apply(lambda x: x.str.split('.').str[1].str.len()).max() 
print (a) 
A 2 
B 4 
C 3 
D 1 
dtype: int64 

df = a.to_frame().T 
print (df) 
    A B C D 
0 2 4 3 1 

另一种解决方案:

df = df.fillna(0).astype(str) 
a = [df[x].str.split('.').str[1].str.len().max() for x in df] 

df = pd.DataFrame([a], columns=df.columns) 
print (df) 
    A B C D 
0 2 4 3 1 
+1

似乎工作,我不得不删除NaN工作df_na = df.fillna(value = 0) – Submi

+0

我不得不谢谢你:)再次你帮我! – Submi

+0

如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067) - 点击答案旁边的复选标记('✓')将其从灰色填充。谢谢。 :) – jezrael

1

我认为你正在寻找applymap即

如果你有一个数据帧DF

 
     A   B  C D 
0 0.01 0.0923 1.000 1.2 
1 100.10 203.3000 1.093 1.9 
2 0.00 0.2300 1.030 1.0 
ndf = pd.DataFrame(df.astype(str).applymap(lambda x: len(x.split(".")[-1])).max()).T 

如果你有囡,你可以使用,如果其他人即

ndf = pd.DataFrame(df.astype(str).applymap(lambda x: len(x.split(".")[-1]) if x != 'nan' else 0).max()).T 

输出:

 
    A B C D 
0 2 4 3 1 
+1

这一次也行。多谢你们! – Submi

+0

很高兴帮助@Submi – Dark