首页 > 解决方案 > 在 Python 中删除 CSV 的整个价格列中的最后 2 位数字,或者在最后两位数字之前添加一个小数?

问题描述

我目前有一个看起来像这样的 csv

Category, Item, Price, ID, New Item?
Pants,Velvet Trouser,$16800,173778,False
Pants,Tartan Flannel Skate Pant,$12800,173800,False
Pants,Studded Collars Sweatpant,$15800,173764,False
Pants,Studded Work Pant,$14800,173518,False
Pants,Regular Jean,$14800,173505,False
Pants,Rigid Slim Jean,$15800,173493,False
Pants,Stone Washed Slim Jean,$16800,173502,False
Pants,Stone Washed Black Slim Jean,$14800,173469,False
Skate,Supreme®/Spitfire® Classic Wheels (Set of 4),$3000,173533,False
Skate,Supreme®/Independent® Truck,$5000,173491,False
Skate,Pills Skateboard,$5000,173833,False
Accessories,Supreme®/Mortal Kombat by Arcade1UP,$69800,173854,True
Accessories,Christmas Stocking,$8800,173845,True

我需要调整价格列并截断最后两个零,或者最好在最后两个零之前添加一个小数点。我根本不知道该怎么做。

我试图做这样的事情,但没有采取。

# g = csv.reader(open('Supreme_Items.csv', 'rb'))
# writer = csv.writer(open("SupremeItems.csv", 'wb'))
# for row in r:
#     row[2] = len(str(row[2])) - 2
#     # row[2] = row[2] + ".00"
#     writer.writerow(row)

我应该提到我从 JSON 创建了这个 CSV,以防万一。

标签: pythoncsv

解决方案


如果您可以使用pandas,那么您可以使用str.rsplit('00', n=1)然后将 '.00' 添加到字符串的末尾:

import pandas as pd
df = pd.read_csv(file)
df['Price'] = df['Price'].str.rsplit('00', n=1).str[0] + '.00'
df.to_csv(file, index=False)
df
Out[1]: 
       Category                                          Item    Price  \
0         Pants                                Velvet Trouser  $168.00   
1         Pants                     Tartan Flannel Skate Pant  $128.00   
2         Pants                     Studded Collars Sweatpant  $158.00   
3         Pants                             Studded Work Pant  $148.00   
4         Pants                                  Regular Jean  $148.00   
5         Pants                               Rigid Slim Jean  $158.00   
6         Pants                        Stone Washed Slim Jean  $168.00   
7         Pants                  Stone Washed Black Slim Jean  $148.00   
8         Skate  Supreme®/Spitfire® Classic Wheels (Set of 4)   $30.00   
9         Skate                   Supreme®/Independent® Truck   $50.00   
10        Skate                              Pills Skateboard   $50.00   
11  Accessories           Supreme®/Mortal Kombat by Arcade1UP  $698.00   
12  Accessories                            Christmas Stocking   $88.00   

        ID  New Item?  
0   173778      False  
1   173800      False  
2   173764      False  
3   173518      False  
4   173505      False  
5   173493      False  
6   173502      False  
7   173469      False  
8   173533      False  
9   173491      False  
10  173833      False  
11  173854       True  
12  173845       True  

推荐阅读