有没有办法绕过pandas中的单个列而不影响数据帧的其余部分?
df:
item value1 value2
0 a 1.12 1.3
1 a 1.50 2.5
2 a 0.10 0.0
3 b 3.30 -1.0
4 b 4.80 -1.0
Run Code Online (Sandbox Code Playgroud)
df.value1.apply(np.round)给出
0 1
1 2
2 0
3 3
4 5
5 5
Run Code Online (Sandbox Code Playgroud)
使数据看起来像这样的正确方法是什么:
item value1 value2
0 a 1 1.3
1 a 2 2.5
2 a 0 0.0
3 b 3 -1.0
4 b 5 -1.0
5 c 5 5.0
Run Code Online (Sandbox Code Playgroud)
Lyn*_*ite 51
你很近.你应用了圆形给出的一系列值df.value1.返回类型因此是系列.您需要将该系列分配回数据框(或具有相同索引的其他数据框)
还有一种pandas.Series.round方法基本上是一个简短的手pandas.Series.apply(np.round)
In[2]:
df.value1 = df.value1.round()
print df
Out[2]:
item value1 value2
0 a 1 1.3
1 a 2 2.5
2 a 0 0.0
3 b 3 -1.0
4 b 5 -1.0
Run Code Online (Sandbox Code Playgroud)
Rei*_*mar 30
由于某种原因,如果你有一个带有许多小数位的浮点数,round()方法不起作用,但这样做.
decimals = 2
df['column'] = df['column'].apply(lambda x: round(x, decimals))
Run Code Online (Sandbox Code Playgroud)
小智 19
像这样使用pandas.DataFrame.round()方法:
df = df.round({'value1': 0})
Run Code Online (Sandbox Code Playgroud)
未包含的任何列将保持原样。
小智 13
无需使用 for 循环。它可以直接应用于数据框的列
sleepstudy['Reaction'] = sleepstudy['Reaction'].round(1)
Run Code Online (Sandbox Code Playgroud)
小智 6
无需使用 lambda 或创建函数。它很简单。请参阅下面的示例
df['decimal_place_2'] = df['decimal_place_2'].round(2)
Run Code Online (Sandbox Code Playgroud)
如果您正在进行机器学习并使用 tensorflow,则许多浮点数是“float32”,而不是“float64”,并且此线程中提到的任何方法都不可能有效。您必须先转换为 float64。
x.astype('float')
Run Code Online (Sandbox Code Playgroud)
在回合之前(...)。
小智 5
saldo_acred['cumsum_prc_saldo'].astype('float').round(2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60602 次 |
| 最近记录: |