Python 删除特定csv文件中的前导0

Python 删除特定csv文件中的前导0,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有一个名为new.csv的csv文件,我正在尝试删除某个名为code的列中所有前导的0 id、名称、代码 0,凯文,010 约翰,011 凯西,020 3,micheal,030 这只是csv文件的一个示例,除了有近1000行之外。我只想从代码列中删除前导的0 我正试图找到一个解决方案,我可以编辑整个列,供将来参考。例如,假设有一个我想从列中删除的主角“k” 我在网上看到了一些例子,但并不奏效 这就是下面的内容 import pandas as pd import sys with ope

我有一个名为new.csv的csv文件,我正在尝试删除某个名为code的列中所有前导的0

id、名称、代码
0,凯文,010
约翰,011
凯西,020
3,micheal,030
这只是csv文件的一个示例,除了有近1000行之外。我只想从代码列中删除前导的0


我正试图找到一个解决方案,我可以编辑整个列,供将来参考。例如,假设有一个我想从列中删除的主角“k”

我在网上看到了一些例子,但并不奏效

这就是下面的内容

import pandas as pd
import sys

with open('new.csv') as infile:
    title = next(infile)
    infile.seek(0)
    table = pd.read_csv(infile)

table.rename(columns={'Unnamed: 2':''}, inplace=True)

table['code'] = table['code'].str.replace("0", "")
sys.stdout.write(title)
table.to_csv(sys.stdout, ',', index=False)

我建议您在阅读文件时按数字进行转换。例如
int(0001010)
将导致
1010

默认情况下,DataFrame猜测该列为一个数字,因此读取该列将把它们转换为int

data = pd.read_csv('C:/random/d2',header=None,names=['W1','W2'])
df=pd.DataFrame(data)
print(df)
结果 更新为更详细的版本/铸造

data = pd.read_csv('C:/random/d2',header=None,names=['W1','W2'])
df=pd.DataFrame(data)
print(df)

dfNew=pd.DataFrame(columns=['W1','W2'])
rows,clumns=df.shape
for index in range(rows):
    tempRow=[df.iat[index,0], int(df.iat[index,1])]
    dfNew.loc[len(dfNew)]=tempRow
print(dfNew)
结果

        W1  W2
0    kevin  10
1     john  11
2    casey  20
3  micheal  30

您可以使用regex
re.sub
轻松替换前导零。使用这个正则表达式

0+([1-9][0-9]*)
并替换为
\1
基本上是group1内容

试试这些Python代码

import re

s = '''id,name,code <br>
0,kevin,010 <br>
1,john,011 <br>
2,casey,020 <br>
3,micheal,030'''

print(re.sub(r'0+([1-9][0-9]*)', r'\1', s))
输入文件的内容
data.txt

id,name,code <br>
0,mmmkevin,010 <br>
1,mmmjohn,011 <br>
2,mmmcasey,020 <br>
3,mmmicheal,030

您应该尝试使用字符串片段删除
0
,例如:

table['code'] = table['code'].str[1:]
另外,如果
0
后面有一个逗号,如:
0,
,则尝试使用此逗号:

table['code'] = table['code'].str[2:]
以我为例:

txt = '''id,name,code <br>
0,kevin,010 <br>
1,john,011 <br>
2,casey,020 <br>
3,micheal,030'''
txt = txt.split('\n')
txt = [i.rpartition(',') for i in txt]
txt = [''.join([i[0],i[1],i[2].lstrip('0')]) for i in txt]
txt = '\n'.join(txt)
print(txt)
结束时,不要打印
txt
do:

with open('yournewfile.csv','w') as f:
    f.write(txt)

尝试用以下内容替换行
表['code'].str.replace(“0”,”)

1。这将删除任何前导数字

table['code'].replace('^\d', '', regex=True)
2。这将删除前导0

table['code'].replace('^0', '', regex=True)
请注意:要永久替换,请使用
inplace=True

table['code'].replace('^0', '', regex=True, inplace=True)

如果您只是简单地将其转换为int,则不会有任何前导0
int('000101')
结果为101。此外,您甚至不需要
pandas
为此,这太麻烦了。也许您可以使用文本编辑器将正则表达式
,0+
替换为
我正在尝试找到一种解决方案,我可以编辑整个列以供将来参考。例如,假设我想从列中删除一个主角“k”。@KlaidiZiaj ok。请更新您的问题以反映这一点。虽然这是正确的方法,但这并不构成完整的答案,请提供一个答案,我将很高兴地删除我的downvotelet,让我复制一个代表他的问题的txt文件。没有文件。我正在试图找到一个解决方案,我可以编辑整个列,供将来参考。例如,假设有一个我想从列中删除的主角“k”。由于部分问题是数据在csv文件中,我想在csv文件中对其进行更改,您是否能够重写txt内容而不进行硬编码。我正在尝试找到一种解决方案,我可以编辑整个列以供将来参考。例如,假设有一个我想从列中删除的主角“k”。您是否能够重写txt内容而不是硬编码,因为部分问题是数据在csv文件中,我想在csv文件中更改它。我认为使用
re.sub
是个好主意,但我个人会以稍微不同的方式来做,即
re.sub(r'0+(?=[1-9]),“”,s)
使用零长度断言而不是组。@Daweo:Look-aheads当然可以用作其他方式,但Look-aheads相对来说比分组模式慢,而且分组模式通常得到更广泛的支持,因此我更喜欢这种方式。但就像任何答案一样,有很多方法可以做同样的事情。好建议。@PushpeshKumarRajwanshi好吧,我包含的数据只有几行,因为在新的.csv文件中有1000多个名称。如果我必须从“名称”列中删除所有前导的“m”怎么办?@KlaidiZiaj:当然,您可以用
替换
,m+
,以获得所需的结果。但正如您所说,leading
m
能否显示至少2-3个示例数据,以便我可以澄清在各种情况下如何进行。如果你的名字也以你不想删除的
m
开头呢。
id,name,code <br>
0,kevin,10 <br>
1,john,11 <br>
2,casey,20 <br>
3,michaeal,30
with open('yourfile.csv','r') as f:
    txt = f.read()
with open('yournewfile.csv','w') as f:
    f.write(txt)
table['code'].replace('^\d', '', regex=True)
table['code'].replace('^0', '', regex=True)
table['code'].replace('^0', '', regex=True, inplace=True)