You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python仅导入CSV至Area列最小值处?代码无效求助

解决Langmuir槽实验数据截断问题:只保留压缩阶段到最小面积的数据

我看了你的代码和需求,问题主要出在两个地方:一是你用pandas处理了数据截断,但之后又用numpy.loadtxt重新读取了完整的原始数据,等于之前的截断操作完全没生效;二是你错误地用了idxmax()来找最小面积的位置,应该用idxmin()才对。

下面是修正后的完整代码,我会一步步解释关键改动:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 1. 用pandas读取CSV数据,注意列名大小写要和文件里的一致(你的文件里是Area,不是area)
df = pd.read_csv(
    "C:\\Users\\Owner\\Desktop\\Thunberg,Dametre\\5-29 Data and movies\\New folder (2)\\Data 2.csv",
    sep=','
)

# 2. 找到Area列最小值对应的行索引
min_area_idx = df['Area'].idxmin()

# 3. 截断数据:只保留从开头到最小面积所在行(包括该行)
truncated_df = df.iloc[:min_area_idx + 1]

# 4. 从截断后的DataFrame中提取需要的数组
area = truncated_df['Area'].values
pressure = truncated_df['Pressure'].values
intensity = truncated_df['Intensity'].values

# 5. 绘制双轴图表
fig, ax1 = plt.subplots()

# 绘制面积-压力曲线
ax1.plot(area, pressure, label='Pressure', color='b')
ax1.set_xlabel('Area', color='b')
ax1.set_ylabel('Pressure', color='b')
ax1.tick_params('y', colors='b')

# 创建右侧y轴绘制面积-强度曲线
ax2 = ax1.twinx()
ax2.plot(area, intensity, color='r', label='Intensity')
ax2.set_ylabel('Intensity (measured by average pixel value)', color='r')
ax2.tick_params('y', colors='r')

# 添加标题和图例(合并两个轴的图例)
fig.suptitle('Kibron Trough Pressure-Area-Intensity Graph')
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

plt.show()

关键改动说明:

  • 统一数据读取方式:全程用pandas处理数据,避免重复读取原始文件。pandas的iloc方法可以轻松按索引截断数据,比numpy更直观。
  • 修正索引查找:用df['Area'].idxmin()找到面积最小的行索引,而不是idxmax()(那是找最大面积的索引)。
  • 合并图例:因为双轴图表的图例默认只显示当前轴的内容,所以需要手动合并两个轴的图例,让所有曲线标签都显示出来。
  • 列名大小写匹配:确保代码里的列名'Area'和CSV文件里的列名完全一致,避免找不到列的错误。

用你提供的示例数据测试的话,这段代码会自动截断到Area=3000的那一行,不会导入后面膨胀阶段的3500、4500等数据。

内容的提问来源于stack exchange,提问作者Dametre Thunberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:38