[英]How to reduce digits of a number in Python?
我有一個包含四列的“ CSV”文件:
rep par comm value
USA GER 60705 100
USA GER 607034 200
GER US 607094 300
US UK 60709 340
我打算減少comm列的值,並將它們更改為四位數,如下所示:
rep par comm value
USA GER 6070 100
USA GER 6070 200
GER US 6070 300
US UK 6070 340
為此,我編寫了以下代碼:
infile=csv.reader(open("filepath"))
wfile=open("newfilpath", "wb")
writer=csv.writer(wfile, delimiter=",")
writer.writerow(["rep","par","comm","value"])
infile.next()
for row in infile:
comm=row[2]
hs4=comm[0:4]
writer.writerow([row[0],row[1],hs4,row[3]])
wfile.close()
但是對於60705和60709(是5位數字)這樣的數字,我得到的是607,而不是6070。
更新:我意識到Python以5位數字加零,並且60705變成060705為例。 我不知道如何解決此問題。 這是我的實際數據輸出:
'ALB,DNK,880390,11678\n'
'ALB,FIN,961420,10377\n'
'ALB,FRA,030741,10857\n'
'ALB,FRA,030749,4300\n'
'ALB,FRA,091050,14861\n'
'ALB,FRA,121190,1049561\n'
'ALB,FRA,130219,7291\n'
實際上所有以零開頭的數據都是5位數字,Python會自動將零添加到數據中。
可能是您在6前面有一個空格。您可以嘗試使用.strip()
方法擺脫它。 我還在這里稍微修改了您的代碼:
編輯:現在刪除前導零
import csv
with open("filepath") as ifile, open("newfilpath", "wb") as wfile:
infile = csv.reader(ifile)
writer = csv.writer(wfile)
writer.writerow(next(infile))
for row in infile:
row[2] = row[2].strip().lstrip('0')[:4]
writer.writerow(row)
我建議嘗試使用熊貓以下方法。
import pandas as pd
df=pd.read_csv("test.csv")
print df
t=(df['comm']).astype(str)
for i in t:
print i[:4]
輸出:
rep par comm value
0 USA GER 60705 100
1 USA GER 607034 200
2 GER US 607094 300
3 US UK 60709 340
6070
6070
6070
6070
使用稍微修改的代碼來讀取CSV文件,我得到:
import csv
infile=csv.reader(open("filepath"), delimiter=" ", skipinitialspace=True)
wfile=open("newfilpath", "wb")
writer=csv.writer(wfile, delimiter=",")
writer.writerow(["rep","par","comm","value"])
infile.next()
for row in infile:
print row
comm=row[2]
hs4=comm[0:4]
writer.writerow([row[0],row[1],hs4,row[3]])
wfile.close()}
用輸入:
rep par comm value
USA GER 60705 100
USA GER 607034 200
GER US 607094 300
US UK 60709 340
使用您的代碼,我得到以下輸出:
rep,par,comm,value
USA,GER,6070,100
USA,GER,6070,200
GER,US,6070,300
US,UK,6070,340
我唯一能想到的就是在讀取CSV文件時更改定界符設置或skipinitialspace。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.