Для преобразования данных в числовые значения, которые вы могли бы использовать:
import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5',''], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = pd.to_numeric(df['col'].str.join('')).fillna(0).astype(int)
print(df)
дает
col
0 5
1 8
2 6
3 7
4 0
5 5
Для преобразования данных в строки использования:
df['col'] = df['col'].str.join('').replace('', '0')
Результат выглядит одинаково, но dtype colu mn равно object
, так как значения являются строками.
Если есть больше, чем один номер в нескольких строках, и вы хотите, чтобы выбрать самые большой, то вам придется перебрать каждый элемент в каждой строке, преобразовать каждую строку в числовое значение и принимать макс:
import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5','6'], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = [max([int(xi) if xi else 0 for xi in x] or [0]) for x in df['col']]
print(df)
дает
col
0 6 # <-- note ['','','5','6'] was converted to 6
1 8
2 6
3 7
4 0
5 5
Для версий панд до 0,17, вы могли бы использовать вместо df.convert_objects
:
import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5',''], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = df['col'].str.join('').replace('', '0')
df = df.convert_objects(convert_numeric=True)
Как насчет '['']' и '['5', '6']'? –
В моем случае у меня есть только одна непустая запись. Но в таких случаях можно получить максимум из списка. В этом случае ['5', '6'] должен дать мне 6. спасибо – user4349490