#python #pandas
#python #pandas
Вопрос:
Вот мой код для чтения в этом фрейме данных:
html = 'https://www.agroindustria.gob.ar/sitio/areas/ss_mercados_agropecuarios/logistica/_archivos/000023_Posición de Camiones y Vagones/000010_Entrada de camiones y vagones a puertos semanal y mensual.php'
url = urlopen(html)
df = pd.read_html(html, encoding = 'utf-8')
remove = []
for x in range(len(df)):
if len(df[x]) < 10:
remove.append(x)
for x in remove[::-1]:
df.pop(x)
df = df[0]
Содержащийся фрейм данных использует оба ‘,’ и ‘.’ в качестве тысяч индикаторов, и я не хочу ни того, ни другого. Таким образом, 5.103 должно быть 5103.
Используя этот код:
df = df.apply(lambda x: x.str.replace('.', ''))
df = df.apply(lambda x: x.str.replace(',', ''))
Все данные будут изменены, но все значения в последних четырех столбцах превратятся в NaN. Я предполагаю, что это как-то связано с попыткой использовать str.replace для float?
Попытка любого типа df[column] = df[column].astype(str) также возвращает ошибки, как и что-то запутанное, например следующее:
for x in df.columns.tolist():
for k, v in df[x].iteritems():
if pd.isnull(v) == False and type(v) = float:
df.loc(k, df[x]) == str(v)
Как правильно подойти к этой проблеме?
Ответ №1:
Вы можете попробовать этот подход с регулярными выражениями. Я не тестировал его, но он должен работать.
df = df.apply(lambda x: re.sub(r'(d )[.,](d )',r'12',str(x)))
Комментарии:
1. к сожалению, это, похоже, нарушает фрейм данных