提取文件转Excel
import osimport pandas as pd
# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])
# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))
# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
fujian_files.append(os.path.join(mon_folder, filename))
# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)
for file_path in fujian_files:
df = pd.read_csv(file_path, delimiter=' ')
output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
df.to_excel(output_path, index=False)
如果已知MON 文件夹中所有TXT文件有四列数据,每一列数据由空格隔开如
1959 1 0 19.40
并在转化成Excel的时候插入表头,‘Year’ ‘Mon’ ‘Day’ ‘PRE’
该如何修改
问题分析:
根据提供的代码,您希望将MON文件夹下的TXT文件转换为Excel文件,并在Excel文件中插入表头。每个TXT文件有四列数据,每列数据由空格隔开。你需要修改代码来实现这个目标。
修正后的代码如下:
import os
import pandas as pd
# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])
# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))
# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
fujian_files.append(os.path.join(mon_folder, filename))
# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)
for file_path in fujian_files:
df = pd.read_csv(file_path, delimiter=' ', header=None)
df.columns = ['Year', 'Mon', 'Day', 'PRE']# 添加表头
output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
df.to_excel(output_path, index=False)
修正后的代码在读取TXT文件并转换为DataFrame时指定了header=None,即不使用原有的首行作为表头。然后使用df.columns给DataFrame添加了新的表头。
现在,当代码转换TXT文件为Excel文件时,会在每个Excel文件中插入表头'Year'、'Mon'、'Day'和'PRE'。您可以在本地运行修正后的代码来验证结果。
希望这次的回答对您有帮助!如果您还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
你好!根据你的要求,以下是修改后的代码:
import os
import pandas as pd
# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])
# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))
# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
fujian_files.append(os.path.join(mon_folder, filename))
# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)
for file_path in fujian_files:
df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'])
output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
df.to_excel(output_path, index=False)
print("转换完成!")
主要的修改包括:
- 根据你的要求,添加了names=['Year', 'Mon', 'Day', 'PRE']参数来指定列的表头。
- 修改了输出文件的格式,将.txt替换为.xlsx。
这段代码会遍历MON文件夹下的所有符合条件的文本文件,并将其转换为Excel文件,同时插入了指定的表头。
希望能帮到你!如果还有其他问题,请随时提问。 您可以在调用pd.read_csv方法时传入names参数,这将设置 DataFrame 的列名。代码修改如下:
import os
import pandas as pd
# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])
# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))
# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
fujian_files.append(os.path.join(mon_folder, filename))
# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)
for file_path in fujian_files:
df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'])
output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
df.to_excel(output_path, index=False)
在这段代码中, names=['Year', 'Mon', 'Day', 'PRE']设置了列的名字为 'Year', 'Mon', 'Day', 'PRE'。所以在读取txt文件时,即使源文件中没有列名,也会按照您设定的列名来生成DataFrame。之后,当您把DataFrame存为Excel文件时,列名也会一并被存入。 isdkz 发表于 2023-7-20 15:11
您可以在调用pd.read_csv方法时传入names参数,这将设置 DataFrame 的列名。代码修改如下:
为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
File "pandas\_libs\parsers.pyx", line 812, in pandas._libs.parsers.TextReader.read_low_memory
File "pandas\_libs\parsers.pyx", line 873, in pandas._libs.parsers.TextReader._read_rows
File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
File "pandas\_libs\parsers.pyx", line 2025, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 15 fields in line 13, saw 16 Mike_python小 发表于 2023-7-20 15:11
问题分析:
根据提供的代码,您希望将MON文件夹下的TXT文件转换为Excel文件,并在Excel文件中插入表头。每 ...
为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
File "pandas\_libs\parsers.pyx", line 812, in pandas._libs.parsers.TextReader.read_low_memory
File "pandas\_libs\parsers.pyx", line 873, in pandas._libs.parsers.TextReader._read_rows
File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
File "pandas\_libs\parsers.pyx", line 2025, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 15 fields in line 13, saw 16
王大可2000 发表于 2023-7-20 15:30
为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
File "pandas\_libs\parsers ...
这个错误是由于 pandas 在解析文件时发现了数据的不一致性。具体来说,它期望在第13行看到15个字段,但实际上看到了16个字段。这可能是由于数据文件中存在额外的分隔符、缺失值或者其他的格式错误。
一种可能的解决方案是增加参数error_bad_lines=False到pd.read_csv函数中,这样在读取数据时,如果遇到格式错误的行,pandas 就会跳过这一行而不会报错。例如:
df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'], error_bad_lines=False)
然而这种做法有一定的风险,因为它可能会导致某些数据被无视。所以在使用这种方法之前,您需要确定这样做不会对您的数据分析产生不良影响。
另一种解决方案是打开文本文件并检查第13行(或者其他导致问题的行),看看是否存在任何显而易见的格式错误。如果存在,您可以手动修复这个问题。或者,如果文件过大或错误太多无法手动修复,您也可以编写代码来自动清理或预处理这些数据。 您的代码中只需要做一些小的改动就可以将这些TXT文件中的数据导入为Pandas DataFrame,并在生成Excel文件时添加表头。
在您的代码中,使用pd.read_csv()函数读取TXT文件时,需要添加`names`参数来定义列名。修改后的代码如下:
import os
import pandas as pd
# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])
# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))
# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
fujian_files.append(os.path.join(mon_folder, filename))
# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)
# 需要添加的列名
column_names = ['Year', 'Mon', 'Day', 'PRE']
for file_path in fujian_files:
# 使用read_csv读取txt文件,并添加列名
df = pd.read_csv(file_path, delimiter=' ', names=column_names)
output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
df.to_excel(output_path, index=False)
在上述代码中,我们首先定义了列名列表`column_names`,然后在使用`pd.read_csv()`函数加载TXT文件时,我们将`names`参数设置为`column_names`。这样,在加载数据时,Pandas会自动将这些列名分配给加载的数据。
求最佳答案{:10_254:}
isdkz 发表于 2023-7-20 15:37
这个错误是由于 pandas 在解析文件时发现了数据的不一致性。具体来说,它期望在第13行看到15个字段,但实 ...
为什么会出现TypeError: read_csv() got an unexpected keyword argument 'error_bad_lines' ?
页:
[1]