df.fillna或df.replace无法消除我的.csv文件中的NaN

问题描述 投票:0回答:2

我知道这里有很多类似的问题。但是,所有答案似乎都不适合我。请注意,我是一名初学者程序员,仅通过YouTube教程学习了此内容。

我的程序通过在YouTube上找到的此代码下载this .csv文件

def download_data(csv_url):
    response = request.urlopen(csv_url)
    csv = response.read()
    csv_str = str(csv)
    lines = csv_str.split ("\\n")
    dest_url = r'NO_AM1H.csv'
    fx = open(dest_url,"w")
    for line in lines:
        fx.write (line + "\n")
    fx.close()

然后读取.csv并设置定界符。 .csv中的许多值小于7或为空(NaN)。我尝试替换它们,如图所示,但是当我打印数据框(df)时,它仍然显示NaN和<7

df = pd.read_csv('NO_AM1H.csv',delimiter=';')
df = df.replace(np.nan,0)
df = df.replace('<7',0)

print(df.tail(4))

任何帮助将不胜感激,并对任何菜鸟的错误表示歉意。谢谢

python pandas csv pycharm
2个回答
1
投票

您可以做的快速修复是在读取csv时标记可能的NA值,如下所示:

方法1:

df = pd.read_csv('NO_AM1H.csv',delimiter=';', na_values=['<7', 'NaN','nan', None])

# then fill the NAs
df = df.fillna(0)

方法2:

df = df.applymap(lambda x: None if x == '<7' else x)

替换熊猫中的浮动NA的解决方法是:

df = df.applymap(lambda x: 0 if str(x) == 'nan' else x)

0
投票

我认为您可能遇到编码问题。

在我使用的Linux中

file -i NO_AM1H.csv

告诉我文件编码为NO_AM1H.csv:文本/纯文本; charset = iso-8859-1

然后我使用read_csv导入它并指定编码。

尝试一下,

import pandas as pd
import numpy as np

df = pd.read_csv('NO_AM1H.csv', sep=';',header=0, encoding='iso-8859-1')

df = df.replace(np.nan,0)
df = df.replace('<7',0)

它看起来像,

              Datum   Zeit AABU NO AM1H [µg/m³]  ... WALS NO AM1H [µg/m³] WAST NO AM1H [µg/m³] WULA NO AM1H [µg/m³]
8780  18.01.2020  21:00                    0  ...                    0                    0                    0
8781  18.01.2020  22:00                    0  ...                    0                    0                    0
8782  18.01.2020  23:00                    0  ...                    0                    0                    0
8783  18.01.2020  24:00                    0  ...                    0                    0                    0

对于.head()和.tail()而言>

注意,我确实修改了您的原始文件,并删除了第一行(第0行)。

© www.soinside.com 2019 - 2024. All rights reserved.