Python 从除一列之外的所有列中删除逗号

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

有没有办法在通用代码中删除除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

在数据帧的列上使用,不包括
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