鱼C论坛

 找回密码
 立即注册
查看: 1845|回复: 2

pandas处理

[复制链接]
发表于 2023-5-11 08:16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.批量将txt文档转化为excel文件,excel文件命名只保留数字。
.添加excel文件表头,年,月,日,降水(保留一位小数)。
.如果降水出现负值和-999,替换为0。
import pandas as pd
import os

# 获取当前文件夹下所有txt文件
txt_files = [f for f in os.listdir('.') if f.endswith('.txt')]

for txt_file in txt_files:
    # 读取txt文件
    df = pd.read_csv(txt_file, sep='\t', header=None, names=['date', 'precipitation'])

    # 将日期拆分为年、月、日
    df[['year', 'month', 'day']] = df['date'].str.split('-', expand=True)

    # 替换负值和-999为0
    df.loc[(df['precipitation'] < 0) | (df['precipitation'] == -999), 'precipitation'] = 0

    # 保留一位小数
    df['precipitation'] = df['precipitation'].round(1)

    # 生成excel文件,文件名只保留数字
    excel_file_name = ''.join(filter(str.isdigit, txt_file)) + '.xlsx'
    df.to_excel(excel_file_name, index=False, columns=['year', 'month', 'day', 'precipitation'])


为什么可运行但是无结果


import pandas as pd
import os
input_dir = "input"  # 输入目录
output_dir = "output"  # 输出目录


for file_name in input_files:
    # 读取txt文件并转换为DataFrame
    file_path = os.path.join(input_dir, file_name)
    df = pd.read_csv(file_path, sep="\t", header=None, names=["date", "precipitation"])
   
    # 添加年、月、日列
    df["year"] = df["date"].apply(lambda x: int(str(x)[:4]))
   df["month"] = df["date"].apply(lambda x: int(str(x)[4:6]) if not str(x)[4:6].isspace() else 0)
    df["day"] = df["date"].apply(lambda x: int(str(x)[6:]))
   
    # 删除原日期列
    df = df.drop("date", axis=1)
   
    # 替换无效值
    df = df.replace(-999, 0)
    df = df[df["precipitation"] >= 0]
   
    # 保留一位小数
    df["precipitation"] = round(df["precipitation"], 1)
   
    # 保存为Excel文件
    output_file_name = "".join(filter(str.isdigit, file_name)) + ".xlsx"
    output_file_path = os.path.join(output_dir, output_file_name)
    df.to_excel(output_file_path, index=False)
为何添加年月日出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-11 08:16:59 | 显示全部楼层
第一个问题可能是因为文件夹中没有符合条件的txt文件,或者文件中的数据格式不符合预期。可以在循环前打印出txt_files列表,检查文件是否被正确识别。

第二个问题可能是因为缩进不正确,导致代码块出现了错误。可以检查每一行的缩进是否正确,特别是df["month"] = ...这一行是否与前一行对齐。另外,也可以检查date列中是否存在空格,如果存在空格,可以使用strip()函数去除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 13:55:35 | 显示全部楼层
缩进不正确,导致添加年月日的代码段出错。在第20行和第21行之间有一些多余的空格,会导致语法错误。建议删除这些空格,使得添加年月日列的代码与前面的代码拥有相同的缩进层级。具体来说,应该将第21行的缩进调整到第20行的后面。

另外,在添加月份列时,需要加上判断是否为空格的条件,以防止出现字符串切片错误。可以修改为如下代码:

df["month"] = df["date"].apply(lambda x: int(str(x)[4:6]) if str(x)[4:6].strip() else 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表