我知道这里有很多类似的问题。但是,所有答案似乎都不适合我。请注意,我是一名初学者程序员,仅通过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))
任何帮助将不胜感激,并对任何菜鸟的错误表示歉意。谢谢
您可以做的快速修复是在读取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)
我认为您可能遇到编码问题。
在我使用的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行)。