Все столбцы в моем наборе данных кажутся плавающими. Некоторые содержат такие значения, как '20. или 11 '

Как можно выборочно и быстро удалить точку и пробел, не влияя на другие значения в столбце, такие как «24,4» или «12,5»?

Я пробовал несколько решений, но ни одно из них не помогло.

Моя цель - поменять, например, 12 год. 'до' 12 ', для каждого значения в каждой ячейке, где'. 'появляется.

-2
skeitel 25 Авг 2017 в 15:43

3 ответа

Лучший ответ

Вы можете использовать регулярные выражения, чтобы сделать это с заменой, т.е.

df.replace('\.(?!\d)','',regex=True) 

Если у вас есть датафрейм, как.

df = pd.DataFrame(['12.','13.','14.1','15.5'])
df.replace('\.(?!\d)','',regex=True) # inplace = True if you want to change main dataframe.
      0
0  12  
1  13  
2  14.1
3  15.5
0
Bharath 25 Авг 2017 в 12:54

Если ваш столбец содержит строку:

>>> a
   0     1
0  1  12. 
1  2  14.5
2  3  15. 
3  4  16.3
>>> a[1]=[i.replace('. ', '') for i in a[1]]
>>> a
   0     1
0  1    12
1  2  14.5
2  3    15
3  4  16.3

Если есть float, вы можете создать новый список со смешанным типом (int и float):

>>> b=[int(i) if i.is_integer() else float(i) for i in a[1]]
>>> b
[12, 14.5, 15, 16.3]

Но вы не можете сделать это во фрейме данных:

>>> a[1]=[int(i) if i.is_integer() else float(i) for i in a[1]]
>>> a
     0     1
0  1.0  12.0
1  2.0  14.5
2  3.0  15.0
3  4.0  16.3
0
Dadep 25 Авг 2017 в 12:56

Вы можете установить пользовательскую функцию форматирования с плавающей точкой для панд, например:

>>> import pandas as pd
>>> df = pd.DataFrame({'col1':[1, 2, 3], 'col2':[2.0, 1.0, 4.1]})
>>> pd.set_option('display.float_format', lambda x: ('%f' % x).rstrip('.0'))
>>> df
   col1  col2
0     1     2
1     2     1
2     3   4.1
1
Aleksandr Borisov 25 Авг 2017 в 13:01