метод .Round() не работает с моим фреймом данных

#python #pandas

#python #панды

Вопрос:

У меня есть фрейм данных df1, созданный с данными, импортированными из Excel, как показано ниже, и я хочу округлить столбцы с ‘безымянных 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.

Попытка 2: в частности, вызовите столбцы, которые нужно округлить в меньшую сторону через

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

Вывод: df2 остается таким же, как df1.

Не уверен, что еще попробовать …?

Комментарии:

1. Я запустил ваш код в своей среде. Он правильно округлен до трех цифр. Проверьте тип данных с df.info() помощью .

2. Я обновил свой исходный пост. Эта информация предполагает, что фрейм данных содержит ненулевые записи и, следовательно, должен работать? Я тоже посмотрю на сообщение @Clinton Sorrel

3. Поскольку тип данных должен быть ‘float’, он должен быть преобразован с df.astype(float) помощью .

4. именно в этом и заключалась проблема. Большое спасибо за вашу помощь.

Ответ №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