2017-04-12 49 views
2

我有一張表。我正在創建一個新的專欄「時間」。我需要用數字填充它,具體取決於「類型」列中的數據。例如,如果在「類型」欄的單元格中是dgv,那麼在「時間」欄中應該有一個數字17,如果是ds,那麼8,如果是psp,那麼是3,等等。總共有幾個條件。通過比較另一列的數據獲得的數據填充列

part of the table

我的代碼:

import csv 

with open('C:/Notebook/data1.txt','r') as csvinput: 
    with open('C:/Notebook/datawr1.txt', 'w') as csvoutput: 
     writer = csv.writer(csvoutput, lineterminator='\n') 
     reader = csv.reader(csvinput) 

     all = [] 
     row = next(reader) 
     row.append('Timing') # Here I create a column "Timing" 
     all.append(row) 

     for row in reader: #I think here should be a condition if 
      row.append(' ') 
      all.append(row)   


     writer.writerows(all) 

回答

1

我想你可以通過字典d使用map,如果不匹配得到NaN

df = pd.DataFrame({'type':['dgv','ds','psp', 'a']}) 
print (df) 
    type 
0 dgv 
1 ds 
2 psp 
3 a 

d = {'dgv':17,'ds':8,'psp':3} 
df['Timing'] = df['type'].map(d) 
print (df) 
    type Timing 
0 dgv 17.0 
1 ds  8.0 
2 psp  3.0 
3 a  NaN 

編輯:

在大熊貓讀取文件是使用read_csv,寫to_csv(沒有問題,如果它是.txt文件):

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""code,type,date,quantity 
0,dgv,07.11.2016,1 
0,dgv,08.06.2016,1 
0,ds,01.07.2016,1 
0,ds,03.08.2016,1 
0,ds,03.08.2016,1 
0,psp,06.03.2016,1 
0,a,07.08.2016,1""" 
#after testing replace 'StringIO(temp)' to 'filename.txt' 
df = pd.read_csv(StringIO(temp)) 
print (df) 
    code type  date quantity 
0  0 dgv 07.11.2016   1 
1  0 dgv 08.06.2016   1 
2  0 ds 01.07.2016   1 
3  0 ds 03.08.2016   1 
4  0 ds 03.08.2016   1 
5  0 psp 06.03.2016   1 
6  0 a 07.08.2016   1 

d = {'dgv':17,'ds':8,'psp':3} 
df['Timing'] = df['type'].map(d) 
print (df) 
    code type  date quantity Timing 
0  0 dgv 07.11.2016   1 17.0 
1  0 dgv 08.06.2016   1 17.0 
2  0 ds 01.07.2016   1  8.0 
3  0 ds 03.08.2016   1  8.0 
4  0 ds 03.08.2016   1  8.0 
5  0 psp 06.03.2016   1  3.0 
6  0 a 07.08.2016   1  NaN 

df.to_csv('myfile.txt', index=False) 
+0

感謝您的回答!但問題是文件中有很多數據。該文件是.txt格式。這個文件每次都不一樣。我想讓代碼讀取文件並添加「Timing」列並填寫它。我不明白如何將「類型」列作爲日期框架。 –

+0

請檢查編輯答案 – jezrael

+0

它的工作原理!謝謝! –

相關問題