2017-08-15 64 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