使用Pandas从CSV字符串行提取数值并转换对应数据类型
从特定格式CSV中提取数值并转换类型
问题描述
我有一个内容如下的CSV文件:
StrainMax 0.125 StrainMin -0.125 cycles_sec 10 time_percent 50
使用以下代码读取文件:
import pandas as pd df = pd.read_csv('Strains_SI.csv', index_col=None, header=None)
接着执行提取代码:
StrainMax = df.iat[0,0] StrainMin = df.iat[1,0] cycles_sec = df.iat[2,0] time_percent = df.iat[3,0] print(StrainMax) print(StrainMin) print(cycles_sec) print(time_percent)
得到的结果是包含标识和数值的整行字符串:
StrainMax 0.125 StrainMin -0.125 cycles_sec 10 time_percent 50
需要提取其中的数值并转换为对应类型:
- 0.125(float类型)
- -0.125(float类型)
- 10(integer类型)
- 50(integer类型)
解决方案
方法1:读取时指定分隔符
你的CSV本质是空格分隔的键值对,读取时指定sep='\s+'(匹配任意数量空格),直接拆分键和数值列,后续提取更高效:
import pandas as pd # 按空格分隔,将第一列设为索引 df = pd.read_csv('Strains_SI.csv', index_col=0, header=None, sep='\s+') # 提取并转换类型 strain_max = float(df.loc['StrainMax', 1]) strain_min = float(df.loc['StrainMin', 1]) cycles_sec = int(df.loc['cycles_sec', 1]) time_percent = int(df.loc['time_percent', 1]) # 验证结果和类型 print(strain_max, type(strain_max)) print(strain_min, type(strain_min)) print(cycles_sec, type(cycles_sec)) print(time_percent, type(time_percent))
输出:
0.125 <class 'float'> -0.125 <class 'float'> 10 <class 'int'> 50 <class 'int'>
方法2:读取后拆分字符串
如果不想修改读取逻辑,可对已读取的整行字符串进行拆分,提取数值部分再转换:
import pandas as pd df = pd.read_csv('Strains_SI.csv', index_col=None, header=None) # 拆分每行字符串,取数值部分转换类型 strain_max = float(df.iat[0,0].split()[1]) strain_min = float(df.iat[1,0].split()[1]) cycles_sec = int(df.iat[2,0].split()[1]) time_percent = int(df.iat[3,0].split()[1]) # 验证结果和类型 print(strain_max, type(strain_max)) print(strain_min, type(strain_min)) print(cycles_sec, type(cycles_sec)) print(time_percent, type(time_percent))
该方法通过split()将字符串按空格分割为列表,取索引1的元素(数值部分),再用float()/int()完成类型转换。
内容的提问来源于Stack Exchange,提问作者Scott Richardson
相关产品推荐
相关产品推荐

