将包含UTF-8和Null的DataFrame转换为字符串而不会丢失数据

时间:2019-04-12 21:09:49

标签: python pandas

这是我要在此数据框中读取的代码:

html = 'https://www.agroindustria.gob.ar/sitio/areas/ss_mercados_agropecuarios/logistica/_archivos/000023_Posici%C3%B3n%20de%20Camiones%20y%20Vagones/000010_Entrada%20de%20camiones%20y%20vagones%20a%20puertos%20semanal%20y%20mensual.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有关?

尝试任何类型的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 个答案:

答案 0 :(得分:0)

您可以尝试这种正则表达式方法。我没有测试过,但是应该可以。

df = df.apply(lambda x: re.sub(r'(\d+)[.,](\d+)',r'\1\2',str(x)))