我有一个要过滤的数据框

I have a data frame that I’d like to filter

在我要过滤的列中,该列包含来自两个不同来源的数据。我想规范化这些数据。我们以某种方式收集了一些数据,而其他数据行包含以另一种方式收集的数据。有些行包含 1.2 2.3 3.4,但不超过 5。我想将这些数字乘以 1,000 以与其他数字相匹配,并从 1,000 以上的数字中删除逗号。

col1 col2
1 1.641
2 1.548
3 1,807.000
4 1,759.000

听起来您想筛选某些行 (col2 < 5),应用转换 (col2 * 1000),然后删除某些内容 (,)。

df.loc[df['col2']<=5,'col2'] = df['col2']*1000

下一步是删除逗号,但如果您知道 col2 中的所有值都是整数(无小数),那么我认为您可以

df['col2'] = int(df['col2'])

但是应用替换更安全,但前提是值是字符串(如果不是,df['col2'] = str(df['col2'])

那么您可以应用以下内容:

df['col'2'] = df['col2'].str.replace(',','')

您可以针对 'col2' 是否包含逗号创建一个布尔掩码。如果它包含逗号,请删除逗号。对于没有逗号的数字,乘以 1000:

mask = df['col2'].str.contains(',')
df.loc[mask, 'col2'] = df.loc[mask, 'col2'].str.replace(',','')
df['col2'] = df['col2'].astype(float)
df.loc[~mask, 'col2'] *= 1000

输出:

   col1    col2
0     1  1641.0
1     2  1548.0
2     3  1807.0
3     4  1759.0

我想到的另一件事是 Python 中的类型混合。根据您上面的内容,我的猜测是您将 col2 作为字符串或浮点数。如果是字符串,则通过 replace 方法删除字符串。如果是浮动的,那么你不需要替换逗号(这可能是 Python 显示成千上万但我不记得具体细节的方式)。

运行 print(df.dtypes) 检查。

我只尝试了其中一种解决方案。

Float64。你说的是准确的@fmarz10。我想过滤行并应用转换,然后删除一些内容。第一行代码完美无缺,刚刚好。

df.loc[df[‘col2’]<=5,’col2’] = df[‘col2’]*1000

但是,我确实没有使用第二个建议,因为有些数字不仅仅是整数,而且包含至少两位小数的值。为了完成它,我做了类似的事情,只扫描前几行看起来不错。

df[‘col’2’] = df[‘col2’].replace(‘,’,’’)

对比原来的建议:

df[‘col’2’] = df[‘col2’].str.replace(‘,’,’’)

注意:这行得通,但这是每周数据,每行都是一周的数据,大约有 15,000 行,所以在进行评估之前我只需要浏览几行,但前几行看起来好的。