2017-05-24 23 views
-5

作为输入,我有这样一个.csv文件:如何更改.csv文件的所有示例中的特定元素?

user, withdraw, date 
50D8BF0DA22D6C914777D8F59DAAB4D8, -125, 01-02-2015 
674BCF0CD236621E5680073334A73C32, -5, 01-02-2015 
E17E1691D35FB2FB675E3B787B8BEDF1, -845, 01-02-2015 
50D8BF0DA22D6C914777D8F59DAAB4D8, -250, 01-02-2015 
674BCF0CD236621E5680073334A73C32, -98, 01-02-2015 
50D8BF0DA22D6C914777D8F59DAAB4D8, -17, 01-02-2015 

我想找出所有相似的hash码,并改变他们的标签,如“用户1”,“用户2”,“用户3”。 ..等等。

我一直在试图做到这一点,没有成功与熊猫。任何想法我可以做什么?

+2

你想阅读这些信息到你的程序进行处理,或者是你试图更改原始的.csv文件?什么必须已经试图做到这一点?请注意6个投票人的提问,请说明你为什么会投下一个问题,以便提问者可以知道为什么你认为这不是一个好问题,并且下次做得更好。 –

+0

我不相信你可以更新。相反,阅读,修改和替换。 ://docs.python.org/3/library/csv.html 和https://stackoverflow.com/questions/16020858/inline-csv-file-editing-with-python – SteveJ

+0

感谢支持@DavyM,我不知道为什么人们投下了票。无论如何,回答你的问题,我想改变.csv,或生成一个新的。 –

回答

4

先读CSV到熊猫DF:

df = pd.read_csv('/path/to/file.csv', skipinitialspace=True) 

产量:

In [84]: df 
Out[84]: 
           user withdraw  date 
0 50D8BF0DA22D6C914777D8F59DAAB4D8  -125 01-02-2015 
1 674BCF0CD236621E5680073334A73C32  -5 01-02-2015 
2 E17E1691D35FB2FB675E3B787B8BEDF1  -845 01-02-2015 
3 50D8BF0DA22D6C914777D8F59DAAB4D8  -250 01-02-2015 
4 674BCF0CD236621E5680073334A73C32  -98 01-02-2015 
5 50D8BF0DA22D6C914777D8F59DAAB4D8  -17 01-02-2015 

现在我们可以因式分解user柱:

In [85]: df['user'] = 'user' + pd.Series((pd.factorize(df.user)[0]+1).astype(str)) 

In [86]: df 
Out[86]: 
    user withdraw  date 
0 user1  -125 01-02-2015 
1 user2  -5 01-02-2015 
2 user3  -845 01-02-2015 
3 user1  -250 01-02-2015 
4 user2  -98 01-02-2015 
5 user1  -17 01-02-2015 

和写DF回CSV:

df.to_csv('/path/to/file_new.csv', index=False) 
+0

非常感谢!精美的作品。 –

+0

@RogerAlmeidaLeite,很高兴我可以帮助:) – MaxU

3

你需要先建立用户的字典如下:

import csv 

hashes = {} 
user_number = 1 
entries = [] 

with open('input.csv', 'rb') as f_input: 
    csv_input = csv.reader(f_input, skipinitialspace=True) 
    header = next(csv_input) 

    for row in csv_input: 
     user = row[0] 

     if user not in hashes: 
      hashes[user] = "user{}".format(user_number) 
      user_number += 1 

     row[0] = hashes[user] 
     entries.append(row) 

with open('output.csv', 'wb') as f_output: 
    csv_output = csv.writer(f_output) 
    csv_output.writerow(header) 
    csv_output.writerows(entries) 

给你一个output.csv包含:

user,withdraw,date 
user1,-125,01-02-2015 
user2,-5,01-02-2015 
user3,-845,01-02-2015 
user1,-250,01-02-2015 
user2,-98,01-02-2015 
user1,-17,01-02-2015 
相关问题