Преобразование фрейма данных, содержащего UTF-8 и нули, в строку без потери данных

#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. к сожалению, это, похоже, нарушает фрейм данных