dataframe 内的to_csv和from_csv能使存储的数据不变

大数据分析中,使用Dataframe的to_csv保存数据,然后通过from_csv读取,能确保数据不变,避免每次存取增加一列index。推荐使用from_csv以保持数据完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       大数据分析时,Dataframe 内的to_csv和from_csv能使存储的数据不变;而使用to_csv和read_csv则每存取一次就多一列index。故,最好用from_csv。

       用from_csv:

a = [("bababa",6.9),("cacaca",5),("aaaaaa",3)]
b = DataFrame(a)

b.to_csv('D:\python\\test1\\result\\init_result.csv')
print b
c = DataFrame.from_csv('D:\python\\test1\\result\\init_result.csv')
print c

c.to_csv('D:\python\\test1\\result\\init_result.csv')
d = DataFrame.from_csv('D:\python\\test1\\result\\init_result.csv')
print d

d.to_csv('D:\python\\test1\\result\\init_result.csv')
e = DataFrame.from_csv('D:\python\\test1\\result\\init_result.csv')
print e

       用read_csv:
a = [("bababa",6.9),("cacaca",5),("aaaaaa",3)]
b = DataFrame(a)

b.to_csv('D:\python\\test1\\result\\init_result.csv')
print b
c = pandas.read_csv('D:\python\\test1\\result\\init_result.csv')
print c

c.to_csv('D:\python\\test1\\result\\init_result.csv')
d = pandas.read_csv('D:\python\\test1\\result\\init_result.csv')
print d

d.to_csv('D:\python\\test1\\result\\init_result.csv')
e = pandas.read_csv('D:\python\\test1\\result\\init_result.csv')
print e



``` import csv import re import statistics import os import pandas as pd from glob import glob def extract_data_from_csv(file_path, target_points): # 创建字典存储不同坐标的数据集合 results = {point: [] for point in target_points} with open(file_path, 'r', newline='', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) current_array = [] is_inside_data_content = False for row in reader: if any(re.search(r'<DataContent No="\d+"', cell) for cell in row): is_inside_data_content = True current_array = [] elif any('</DataContent>' in cell for cell in row): is_inside_data_content = False # 遍历所有目标点进行数据提取 for (t_row, t_col) in target_points: # 注意:current_array使用0-based索引 if len(current_array) >= t_row and len(current_array[t_row - 1]) >= (t_col - 1): try: # 注意:current_array已去掉第一列,所以实际列号减1 extracted_value = current_array[t_row - 1][t_col - 1] results[(t_row, t_col)].append(float(extracted_value)) except (IndexError, ValueError): continue elif is_inside_data_content: current_array.append(row[1:]) # 继续跳过第一列 return results def calculate_statistics(data_dict): stats = {} for point, values in data_dict.items(): if not values: stats[point] = (None, None) continue mean_value = statistics.mean(values) std_dev_value = statistics.stdev(values) stats[point] = (mean_value, std_dev_value) return stats # 使用函数提取数据,假设用户希望提取第x行第y列的数据 target_points = [ (2, 2), (2, 18), (2, 32), (28, 2), (28, 18), (28, 32), (57, 2), (57, 18), (57, 32) ] # 设置文件路径 base_dir = r"E:\中尺寸开发科\HS11\VP2整机调试\SNR\1#\1W1B" file_list = sorted( [os.path.join(base_dir, f"{i}.csv") for i in range(1, 10)], key=lambda x: int(os.path.basename(x).split('.')[0]) ) # 校验文件数量 if len(file_list) != len(target_points): raise ValueError("CSV文件数量与目标点数不匹配") # 处理所有文件 result_data = [] for file_path, (t_row, t_col) in zip(file_list, target_points): data_dict = extract_data_from_csv(file_path, [(t_row, t_col)]) stats = calculate_statistics(data_dict) # 提取统计结果 (mean, std) = stats.get((t_row, t_col), (None, None)) result_data.append({ "文件名": os.path.basename(file_path), "行号": t_row, "列号": t_col, "平均值": round(mean, 4) if mean is not None else "N/A", "标准差": round(std, 4) if std is not None else "N/A" }) # 生成输出路径 output_path = os.path.join(base_dir, "combined_result.xlsx") # 创建DataFrame并保存 df = pd.DataFrame(result_data) df.to_excel(output_path, index=False, engine="openpyxl") print(f"合并结果已保存至:{output_path}")```如果我想处理多个文件夹中的文件,输出结果分别保存到对应路径,应该怎样修改
03-14
增加部分代码,按文件名重命名列名,例如“2022_merged",包含年份”20xx"。举例格式"2022_Sample_DO"。 原代码如下:import os import pandas as pd # --------------------- 参数设置 --------------------- # CSV 文件夹路径(修改为你的路径) csv_folder = r"D:\JW\BaiduSyncdisk\数据\SZML\rasters" # 输出结果路径 output_csv = r"D:\JW\BaiduSyncdisk\数据\SZML\rasters\merged_t1.csv" # --------------------- Step 1: 获取所有 CSV 文件路径 --------------------- csv_files = [f for f in os.listdir(csv_folder) if f.endswith('.csv')] # --------------------- Step 2: 循环读取并按 ID 合并 --------------------- merged_df = None for csv_file in csv_files: file_path = os.path.join(csv_folder, csv_file) # 读取 CSV 数据 df = pd.read_csv(file_path) # 检查是否含有 'ID' 列 if 'id' not in df.columns: raise ValueError(f"{csv_file} 中缺少 'id' 列") # 提取 ID 列第一个数据列(假设为第二列) value_columns = [col for col in df.columns if col != 'id'] if len(value_columns) == 0: raise ValueError(f"{csv_file} 中除了 'id' 外无其他数据列") # 只取一个值列 value_col = value_columns[0] # 重命名该值列为文件名(不带扩展名) short_name = os.path.splitext(csv_file)[0] df = df[['id', value_col]].rename(columns={value_col: short_name}) # 合并 if merged_df is None: merged_df = df else: merged_df = pd.merge(merged_df, df, on='id', how='outer') # --------------------- Step 3: 导出结果 --------------------- merged_df.to_csv(output_csv, index=False) print(f"合并完成!输出文件已保存至:{output_csv}")
最新发布
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值