#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