【问题标题】:.Round() method does not work with my dataframe.Round() 方法不适用于我的数据框
【发布时间】:2020-09-29 13:26:39
【问题描述】:

我有一个使用从 excel 导入的数据创建的数据框 df1,如下所示,我希望将列从“未命名 26”四舍五入到“未命名 34”到小数点后 3 位。

输入:df1

     Curve 7  Unnamed: 26  Unnamed: 27 Unnamed: 30  Unnamed: 31  Unnamed: 34  
126  2424.53 -0.000416507  0.000547765  0.00123807  0.000496849  0.000611638   
127  2414.78 -0.000524779  0.000573377  0.00144546  0.000465293  0.000653559   
128  2400.96 -0.000522968  0.000775356  0.00192514  0.000654915  0.000874891   
129  2385.15 -0.000660529  0.000800742  0.00254473  0.000915885   0.00121266   
130  2369.16 -0.000633806  0.000877753  0.00292714   0.00121839   0.00156733   
..       ...          ...          ...         ...          ...          ...   
230  863.956   0.00732472 -0.000931889   0.0248365  0.000417123    0.0198425   
231  849.027   0.00743242 -0.000944736   0.0255833  0.000450288    0.0204515   
232  833.801   0.00761184 -0.000993092   0.0265546  0.000394343    0.0211056   
233   818.99   0.00778416 -0.000939103   0.0275128  0.000466737    0.0216808   
234  804.799   0.00780258 -0.000769448   0.0278843  0.000755645    0.0217333   

df1.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 109 entries, 126 to 234
Data columns (total 7 columns):
 #   Column       Non-Null Count  Dtype 
---  ------       --------------  ----- 
 0   Curve 7      109 non-null    object
 1   Unnamed: 26  109 non-null    object
 2   Unnamed: 27  109 non-null    object
 3   Unnamed: 30  109 non-null    object
 4   Unnamed: 31  109 non-null    object
 5   Unnamed: 34  109 non-null    object
 6   Unnamed: 35  109 non-null    object
dtypes: object(7)
memory usage: 6.1+ KB

尝试 1: df2=df1.round(3)

输出: df2 与 df1 相同。

Attempt2:专门调用要向下舍入的列

list=['Unnamed: 26','Unnamed: 27','Unnamed: 30','Unnamed: 31','Unnamed: 34','Unnamed: 35'] df2=pd.DataFrame(df1,columns=list)

输出: df2 与 df1 相同。

不确定还可以尝试什么...?

【问题讨论】:

  • 我在我的环境中运行了您的代码。它被正确地四舍五入到三位数。用df.info()检查数据类型。
  • 我已经更新了我原来的帖子。此信息表明数据框具有非空条目,因此应该可以工作吗?我也会看看@Clinton Sorrel 的帖子
  • 由于数据类型必须是'float',所以要转换成df.astype(float)
  • 这正是问题所在。非常感谢您的帮助。

标签: python pandas


【解决方案1】:

我的直接想法是,round 方法需要两个输入(数字、小数位数)。

也许试试 df = df.apply(lambda x: round(x, 3))`。然后如果你愿意,你也可以对某些列应用不同的轮次

我用这个例子进行了测试,它成功了:

import pandas as pd
#Answering Round question
Curve = [2424.53,1000.467,3000.1234,100.1]
Unnamed_26 = [-.0004567658,-.0005672443,-.00065732114,-.00078695]
Unnamed_27 = [.0012346,.00587261,.00455632,.66778899]
D = {'Curve': Curve,'Unnamed: 26':Unnamed_26,'Unnamed: 27':Unnamed_27}
df = pd.DataFrame(D)
df = df.apply(lambda x: round(x, 3))
df

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2017-10-06
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多