PythonPandas串联

2024-09-27 00:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在下载数据并将它们写入csv,这些csv稍后会被读入python。在python中一次(使用熊猫.read_csv),特定的数据列将被连接起来。然而,有时我下载到CSV的数据是不可用的,最终导致一个不存在的CSV文件。当文件丢失时,连接过程(熊猫海螺)由于“NameError:'xyz'未定义”而导致的阻塞。有没有方法熊猫海螺忽略这样丢失的数据?在

下面是我的剧本

#!/usr/bin/python3.5

import pandas
import time
import os

GFS = pandas.read_csv('/home/user/NWP/TEXT/GFS/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_GFS_temps.csv', index_col=1)
ARW = pandas.read_csv('/home/user/NWP/TEXT/ARW/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_ARW_temps.csv', index_col=1)
HRDPS = pandas.read_csv('/home/user/NWP/TEXT/HRDPS/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_HRDPS_temps.csv', index_col=1)
NAM4 = pandas.read_csv('/home/user/NWP/TEXT/NAM4/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_NAM4_temps.csv', index_col=1)
GFSMOS = pandas.read_csv('/home/user/NWP/TEXT/GFSMOS/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_GFSMOS_temps.csv', index_col=1)
ICON = pandas.read_csv('/home/user/NWP/TEXT/ICON/PJMS/' + time.strftime("%Y%m%d") + '/' + 'PJMS_ICON_temps.csv', index_col=1)


COMP = pandas.concat([GFS['PJMS GFS Temp'], ARW['PJMS ARW Temp'], HRDPS['PJMS HRDPS Temp'], NAM4['PJMS NAM4 Temp'], GFSMOS['PJMS GFSMOS Temp'], ICON['PJMS ICON Temp']], axis=1)

path = "/home/user/NWP/TEXT/COMPOSITES/" + time.strftime("%Y%m%d")
COMP.to_csv(os.path.join(path,'PJMS_ALL_temps.csv'))

exit()

还有一个CSV的例子。它们的格式都是一样的。在

^{pr2}$

这是产生的错误

补偿=熊猫海螺([GFS['PJMS GFS Temp']、ARW['PJMS ARW Temp']、HRDPS['PJMS HRDPS Temp']、NAM4['PJMS NAM4 Temp']、GFSMOS['PJMS GFSMOS Temp']、ICON['PJMS ICON Temp']、axis=1)回溯(最近一次调用最后一次):文件“”,第1行,名称错误:未定义名称“GFSMOS”


Tags: csvtextpandashomereadtimetempuser
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:08

一个简单的修复方法是检查您关心的列。下面是一些代码,用于研究与read_csv相关的各种事情。在

import pandas as pd

try:
    df = pd.read_csv('nosuchfile.csv')
    print("df=",df)
except Exception as e:
    print("no file raised:", e)

try:
    f = open('empty.csv', 'w')
    f.close()
    df = pd.read_csv('empty.csv')
    print(df)
except Exception as e:
    print('empty file raised:', e)

df = pd.DataFrame({'a': [1,2,3], 'b':[4,5,6]})
print(df)

if 'a' in df:
    print("yes a")
else:
    print("no a")

if 'xyz' in df:
    print("yes xyz")
else:
    print("no xyz")

输出如下:

^{pr2}$

它告诉我,您的输入csv文件不是空的/不存在的(因为您没有询问这些错误),而且您可以使用Python in操作符提前检查列。在

(当然,EAFP,这样您就可以捕获异常并从那里开始…)

更新

根据注释,我修改了代码,将内容存储在字典中,按明显的字符串名称编制索引,而不是存储在单独的变量中。这使得处理更容易,并且更容易使用循环进行操作。在

修改后的版本忽略了FileNotFound错误,只是跳过了不可用的数据。我不知道这是否真的有用,但它似乎正是你所要求的。在

import pandas
import time
import os

Csv_fmt = "{home}/TEXT/{type}/PJMS/{timestamp}/PJMS_{type}_temps.csv"
Home_dir = os.environ('HOME')
Timestamp = time.strftime("%Y%m%d")

# Note: ordering here taken from your concat statement.
Temp_types = "GFS ARW HRDPS NAM4 GFSMOS ICON".split()

Temp_dataframes = {}

for temp in Temp_types:
    try:
        path = Csv_fmt.format(home=Home_dir, type=temp, timestamp=Timestamp)
        df = pandas.read_csv(path, index_col=1)
        Temp_dataframes[temp] = df
    except FileNotFoundError:
        print("File not found: ",temp)
        pass

Col_fmt = 'PJMS {} Temp'

concat_cols = [Temp_dataframes[tt][Col_fmt.format(tt)] for tt in Temp_types if tt in Temp_dataframes]
COMP = pandas.concat(concat_cols)

#COMP = pandas.concat([GFS['PJMS GFS Temp'], ARW['PJMS ARW Temp'], HRDPS['PJMS HRDPS Temp'], NAM4['PJMS NAM4 Temp'], GFSMOS['PJMS GFSMOS Temp'], ICON['PJMS ICON Temp']], axis=1)

path = "/home/user/NWP/TEXT/COMPOSITES/" + time.strftime("%Y%m%d")
COMP.to_csv(os.path.join(path,'PJMS_ALL_temps.csv'))

exit()

相关问题 更多 >

    热门问题