Python 从除一列之外的所有列中删除逗号
有没有办法在通用代码中删除除1或2(此处仅为日期)之外的所有列中的逗号?(我实际上有20个专栏。) 预期产出:Python 从除一列之外的所有列中删除逗号,python,python-3.x,pandas,list,dataframe,Python,Python 3.x,Pandas,List,Dataframe,有没有办法在通用代码中删除除1或2(此处仅为日期)之外的所有列中的逗号?(我实际上有20个专栏。) 预期产出: df date price vol 0 2010-01-04 34,57282657 2,600,000 1 2010-01-04 123,900 2,600,000 2 2010-01-04 353,6789738 2,600,000 在数据帧的列上使用,不包括exclud
df
date price vol
0 2010-01-04 34,57282657 2,600,000
1 2010-01-04 123,900 2,600,000
2 2010-01-04 353,6789738 2,600,000
在数据帧的列上使用,不包括exclude
列表中的列:
date price vol
0 2010-01-04 3457282657 2600000
1 2010-01-04 123900 2600000
2 2010-01-04 3536789738 2600000
结果:
exclude = ['date']
c = df.columns.difference(exclude)
df[c] = df[c].replace(',', '', regex=True)
为简单起见,可以将列转换为int类型
date price vol
0 2010-01-04 3457282657 2600000
1 2010-01-04 123900 2600000
2 2010-01-04 3536789738 2600000
您可以使用
.iloc
替换为.replace
并传递regex=True
来替换特定的列位置。例如,将第一列后面的所有内容替换为df.iloc[:,1://code>:
df.price.astype(int)
df.vol.astype(int)
imo的最佳解决方案是在read语句中使用数千=','
,即
pd.read_csv(…,千=',')
我们可以使用过滤器
和替换
给@Shubham Sharma的帽子提示,用于正则表达式更正
from io import StringIO
d = """ date price vol
0 2010-01-04 34,57282657 2,600,000
1 2010-01-04 123,900 2,600,000
2 2010-01-04 353,6789738 2,600,000"""
df = pd.read_csv(StringIO(d),sep='\s+',thousands=',')
print(df)
date price vol
0 2010-01-04 3457282657 2600000
1 2010-01-04 123900 2600000
2 2010-01-04 3536789738 2600000
print(df.dtypes)
date object
price int64
vol int64
dtype: object
^(?!date)
不包括日期列-您可以使用按位或符号|
^(?!date | vol)
解释
^在行的开始处断言位置
负前瞻(?!日期|卷)
答案取决于数据类型,因此首先了解施加在不同列上的数据类型很重要。,
表示逗号分隔符、千位分隔符还是数据类型为字符串?在上面的示例中,似乎在price列中,,
表示十进制分隔符,但在vol列中,它表示1000个分隔符。通过调用df.info()
,您可以看到您拥有的数据类型。这将正确地返回一个ValueError
,您需要首先处理字符串。我认为这更像python,但我有,但我发现filter
更有用,因为您可以使用模式和如@Manakin yes:)我认为需要更改正则表达式模式,因为[^date]
与列表中没有的单个字符匹配。@ShubhamSharma谢谢,我的正则表达式肯定需要练习。没问题,我想你是说^(?!date vol)
)。现在更好了:)。
from io import StringIO
d = """ date price vol
0 2010-01-04 34,57282657 2,600,000
1 2010-01-04 123,900 2,600,000
2 2010-01-04 353,6789738 2,600,000"""
df = pd.read_csv(StringIO(d),sep='\s+',thousands=',')
print(df)
date price vol
0 2010-01-04 3457282657 2600000
1 2010-01-04 123900 2600000
2 2010-01-04 3536789738 2600000
print(df.dtypes)
date object
price int64
vol int64
dtype: object
df[df.filter(regex="^(?!date)").columns] = df.filter(regex="^(?!date)")\
.replace(",", "", regex=True)
print(df)
date price vol
0 2010-01-04 3457282657 2600000
1 2010-01-04 123900 2600000
2 2010-01-04 3536789738 2600000