使用作为字符串一部分的整数迭代 for 循环

Posted

技术标签:

【中文标题】使用作为字符串一部分的整数迭代 for 循环【英文标题】:Iterate a for loop with an integer which is a part of a string 【发布时间】:2018-09-11 12:05:59 【问题描述】:

我有一个带有 Time[s]、Time[s].1、Time[s].2 等轴直到 Time[s].30 的 pandas 数据框。我想找出具有最大分辨率的列。为此,我认为我需要将所有这些都放在一个 for 循环中。由于名称'Time[s].x'是一个字符串,我不知道如何将它从0迭代到30。

for i in df['Time[s]."Something to write here"]: 

示例输入数据框:(列直到 Time[s].30)

Time[s]     v1  Time[s].1   v2
160.84621   0   160.84808   7
161.14613   0   161.14802   7

样本输出:'Time[s]' 因为间隔即(df['Time[s]'][1] - df['Time[s]][0])小于 (df['Time[s].1'][1] - df['Time[s].1][0])。 我需要检查所有 30 列。

【问题讨论】:

请发布一些示例输入和预期输出 @VivekKalyanarangan 请在那里找到输入和所需的输出。 @tworitdash - 你认为列名的差异最大吗? @jezrael 是的,我需要最小差异。 【参考方案1】:

我认为需要:

print (df)
     Time[s]  v1  Time[s].1  v2  Time[s].2  v3              Time[s].3  v4
0  160.84621   0  160.84808   7  168.84621   0              162.84808   7
1  161.14613   0  161.14802   7  170.14613   0              164.14802   7
2  163.12613   0  161.14852   7  170.64613   0  Disable this function   7
3  165.16613   0  161.14892   7  170.24613   0              160.14802   7

df1 = df.filter(like='Time').apply(lambda x: pd.to_numeric(x, errors='coerce')).diff()
print (df1)
   Time[s]  Time[s].1  Time[s].2  Time[s].3
0      NaN        NaN        NaN        NaN
1  0.29992    0.29994    1.29992    1.29994
2  1.98000    0.00050    0.50000        NaN
3  2.04000    0.00040   -0.40000        NaN

s = df1.idxmin(axis=1)
print (s)
0          NaN
1      Time[s]
2    Time[s].1
3    Time[s].2
dtype: object

解释

    首先通过DataFrame.filter过滤所有带有Time的列 每列转换to_numeric,参数errors='coerce'表示将非数字转换为NaNs 通过DataFrame.diff获取差异 最后通过DataFrame.idxmin按每行最小值获取列名

【讨论】:

我在 "df = df.filter(like='Time').diff()" 这一行遇到了数据类型错误。错误:unsupported operand type(s) for -: 'str' and 'str' @tworitdash - df.filter(like='Time').astype(float).diff() 工作如何? 现在有这个了。 ValueError: could not convert string to float: 'Disable this function' @tworitdash - 这意味着数字之间有字符串值Disable this function,我编辑答案以将这些值替换为NaNs 没错!谢谢

以上是关于使用作为字符串一部分的整数迭代 for 循环的主要内容,如果未能解决你的问题,请参考以下文章

For循环:通过字符迭代 - Javascript [重复]

python系统学习08for循环知识点合集

Python练习题2

如何使用包含键作为字符串和值作为映射迭代的ngFor循环映射进行迭代

在 for 循环的某些迭代中,字符串的长度为 0,而在其他迭代中则为 0

shell脚本之循环和循环控制