围绕着熊猫的一个圆柱

有没有一种方法可以在不影响其他数据框架的情况下绕过大熊猫中的一列?

>>> print(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

我试过以下方法:

>>> df.value1.apply(np.round)
0    1
1    2
2    0
3    3
4    5
5    5

让数据看起来像这样的正确方法是什么:

  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
175368 次浏览

You are very close. You applied the round to the series of values given by df.value1. The return type is thus a Series. You need to assign that series back to the dataframe (or another dataframe with the same Index).

Also, there is a pandas.Series.round method which is basically a short hand for pandas.Series.apply(np.round).

>>> df.value1 = df.value1.round()
>>> print df
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

For some reason the round() method doesn't work if you have float numbers with many decimal places, but this will.

decimals = 2
df['column'] = df['column'].apply(lambda x: round(x, decimals))

No need to use for loop. It can be directly applied to a column of a dataframe

sleepstudy['Reaction'] = sleepstudy['Reaction'].round(1)

Use the pandas.DataFrame.round() method like this:

df = df.round({'value1': 0})

Any columns not included will be left as is.

If you are doing machine learning and use tensorflow, many float are of 'float32', not 'float64', and none of the methods mentioned in this thread likely to work. You will have to first convert to float64 first.

x.astype('float')

before round(...).

In my case, I have both string values as well as decimal values in single columns.

def round_2(x):
try:
return round(x,2)
except:
return x


df['cur_TMIN_IMD_WeekSum']=df['cur_TMIN_IMD_WeekSum'].apply(round_2)

No need to use lambda or creating function. It is straight-forward. See example below

df['decimal_place_2'] = df['decimal_place_2'].round(2)
saldo_acred['cumsum_prc_saldo'].astype('float').round(2)