Python 如何使用foreach更改数据帧列?
我试图从字符串中获取一个浮点,然后缩放它,然后用新值替换旧值,但是“sample”变量似乎只是一个副本,而不是对列中项目的引用Python 如何使用foreach更改数据帧列?,python,pandas,Python,Pandas,我试图从字符串中获取一个浮点,然后缩放它,然后用新值替换旧值,但是“sample”变量似乎只是一个副本,而不是对列中项目的引用 for sample in AmpDataFrame['Sample']: split_sample = sample.partition(' ') try: tempsample = float(split_sample[0]) tempsample *= CurrentShunt_mVtoAmp sam
for sample in AmpDataFrame['Sample']:
split_sample = sample.partition(' ')
try:
tempsample = float(split_sample[0])
tempsample *= CurrentShunt_mVtoAmp
sample = str(tempsample)
except ValueError:
print("Not a float")
至于失败的原因,您正在迭代
系列中的行值
,因此任何突变都会在副本而不是视图上操作。此外,通过在整个df上执行以下操作,您可以实现您想要的:
AmpDataFrame['Sample'] = (AmpDataFrame['Sample'].str.split(' ').str[0].astype(float) * CurrentShunt_mVtoAmp).astype(str)
因此,这将调用
str.split
并返回第一个split,强制转换为float并乘以您的常量值,然后将其强制转换回str
难道您不能只执行AmpDataFrame['Sample']=(AmpDataFrame['Sample'].str.split('').str[0].astype(float)*currentsparant\u mVtoAmp.astype(str)
有效吗。我不知道我能做我认为是lamda的事情,就像python中那样。我基本上是一个C#dev。那么这种行为会被称为什么呢?它在整个系列中进行某种迭代。你是指我的代码还是你的代码。我的代码直接赋值回原始列,您的方法处理的是iterable,而不是迭代器指向代码的内容。我假设它在幕后迭代序列,并对序列中的每个值执行str.split(“”).str[0].astype(float)*currentspitch\u mVtoAmp).astype(str)。在C#中,可以使用LINQ/lamda表达式。