【发布时间】:2016-02-14 20:25:26
【问题描述】:
我有一个 CSV 文件,其中的行如下所示:
ID,98.4,100M,55M,65M,75M,100M,75M,65M,100M,98M,100M,100M,92M,0#,0N#,
我可以阅读它
#!/usr/bin/env python
import pandas as pd
import sys
filename = sys.argv[1]
df = pd.read_csv(filename)
给定一个特定的列,我想按 ID 拆分行,然后输出每个 ID 的平均值和标准差。
我的第一个问题是,如何从数字中删除所有非数字部分,例如“100M”和“0N#”,它们应该分别是 100 和 0。
我也尝试过遍历相关的标题并使用
df[header].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
正如Pandas DataFrame: remove unwanted parts from strings in a column 中所建议的那样。
但是,这会将 98.4 更改为 984。
【问题讨论】:
-
@Evert 添加了一个编辑以显示我需要如何处理小数点。
-
我列出的重复项建议使用
rstrip,以及您要删除的字符。所以 ...rstrip('MN#')应该可以很好地为您的输入工作,使用副本中建议的 lambda(当然,您可以省略lstrip部分)。 -
@Evert 问题是 MN# 不是唯一的非数字字符。我想我也必须做 lstrip to 吗?
-
@Evert 另外,我在标题上的循环也不起作用。
for header in list(df)[9:-3]:给我列而不是标题。这样做的正确方法是什么?
标签: python pandas dataframe data-manipulation data-munging