Python數據分析基礎——讀寫CSV文件2
阿新 • • 發佈:2018-04-08
str iter pla ins mce python pre invoice 表變量
2.2篩選特定的行:
- 行中的值滿足某個條件
- 行中的值屬於某個集合
- 行中的值匹配於某個模式(即:正則表達式)
2.2.1:行中的值滿足於某個條件:
- 基礎python版:
1 #!/usr/bin/env python3 2 import csv 3 import sys 4 5 input_file = sys.argv[1] 6 output_file = sys.argv[2] 7 8 with open(input_file, ‘r‘, newline = ‘‘) as csv_in_file: 9 with open(output_file, ‘w‘, newline = ‘‘) as csv_out_file: 10 filereader = csv.reader(csv_in_file) 11 filewriter = csv.writer(csv_out_file) 12 header = next(filereader) # 使用CSV模塊的next函數讀出輸入文件的第一行 13 filewriter.writerow(header) # 將標題寫入輸出文件 14 for row_list in filereader: 15 supplier = str(row_list[0]).strip() # 取出每行數據中的供應商名字,賦值給supplier變量16 cost = str(row_list[3]).strip(‘$‘).replace(‘,‘, ‘‘) # 使用列表索引 17 if supplier ==‘Supplier Z‘ or float(cost) > 600.0: 18 filewriter.writerow(row_list)
- pandas版:
#!/usr/bin/env python3 import pandas as pd import sys input_file = sys.argv[1] output_file = sys.argv[2] data_frame = pd.read_csv(input_file) data_frame[‘Cost‘] = data_frame[‘Cost‘] = data_frame[‘Cost‘].str.strip(‘$‘).astype(float) data_frame_value_meets_condition = data_frame.loc[(data_frame[‘Supplier Name‘].str.contains(‘Z‘)) | (data_frame[‘Cost‘] > 600.0), :] data_frame_value_meets_condition.to_csv(output_file, index = False)
2.2.2:行中的值屬於某個集合:
- 基礎python:
1 #!/usr/bin/env python3 # 需求目的:保留那些購買日屬於[‘1/20/14‘,‘1/30/2014‘] 2 import csv 3 import sys 4 5 input_file = sys.argv[1] 6 output_file = sys.argv[2] 7 8 important_dates = [‘1/20/2014‘, ‘1/30/2014‘] # 創建了一個列表的名為important_dates的集合,important_dates是一個列表變量,它就是要屬於的集合 9 10 with open(input_file, ‘r‘, newline = ‘ ‘) as csv_in_file: 11 with open(output_file, ‘w‘, newline = ‘ ‘) as csv_out_file: 12 filereader = csv.reader(csv_in_file) # 使用CSV模塊,的reader函數,創建一個文件讀取對象,名為filereader,它可以用於讀取文章中的行 13 filewriter = csv.writer(csv_out_file) # 使用CSV模塊的writer函數,創建了一個文件輸出對象,名為filewriter,他可以用於將這個對象的數據寫入輸出文件 14 header = next(filereader) # 使用CSV模塊的next函數,讀出輸入文件的第一行 15 filewriter.writerow(header) # 將header——標題行,寫入輸出文件 16 for row_list in filereader: # 遍歷讀取的文章的每一行 17 a_date = row_list[4] # 得到每一行的第5列信息,即為每一行的購買的信息,並將其賦值給變量a_date;這裏使用的是索引值4 18 if a_date in important_dates: # 判斷變量a_date是否屬於important_dates這個集合 19 filewriter.writerow(row_list) # 如果是,則將該行數據寫入輸出文件
pandas:
1 #!/usr/bin/env python3 2 3 import pandas as pd 4 import sys 5 6 input_file = sys.argv[1] 7 output_file = sys.argv[2] 8 9 data_frame = pd.read_csv(input_file) # 讀取輸入文件,將其讀取成dataframe的形式 10 data_frame_value_in_set = data_frame.loc[data_frame[‘Purchase Date‘].isin(important_dates), :] # pandas的簡潔命令:isin() 11 12 data_frame_value_in_set.to_csv(output_file,index = False) # 將data_frame_value_in_set的變量值,轉換成CSV的形式,寫入到輸出文件中
行中的值,匹配於某個正則表達式:
- 基礎python
1 #!/usr/bin/env python3 2 import csv 3 import re # 導入正則表達式模塊(re) 4 import sys 5 input_file = sys.argv[1] 6 output_file = sys.argv[2] 7 pattern = re.compile(r‘(?P<my_pattern_group>^001-.*)‘, re.I) # 使用re模塊的compile函數,創建一個名為pattern的正則表達式的變量 8 with open(input_file, ‘r‘, newline = ‘ ‘) as csv_in_file: 9 with open(output_file, ‘w‘, newline = ‘ ‘) as csv_in_file: 10 filereader = csv.reader(csv_in_file) 11 filewriter = csv.writer(csv_out_file) 12 header = next(filereader) 13 fliewriter.writerow(header) 14 for row_list in filereader: 15 invoice_number = row_list[1] # 16 if pattern.search(invoice_number): # 使用re模塊的search函數在invoice_number的值中尋找模式 17 filewriter.writerow(row_list) # 如果模式出現在invoice_number中,就將這行內容寫入輸出文件中
-
pandas
1 #!/usr/bin/env python3 2 3 import pandas as pd 4 import sys 5 6 input_file = sys.argv[1] 7 output_file = sys.argv[2] 8 9 data_frame = pd.read_csv(input_file) 10 data_frame_value_matches_pattern = data_frame.loc[data_frame[‘Invoice Number‘].str.startswith("001-"), :] 11 data_frame_value_matches_pattern.to_csv(output_file, index = False)
Python數據分析基礎——讀寫CSV文件2