이번엔 pandas module을 이용하여 text file을 parsing 해보겠다.
작업환경
- OS : Windows 10
- PC : LattePanda 4G RAM 64G eMMC (DFR0419)
- NAS : DS1618+
- Python : 3.6.8
- Python Module : mysql, pandas
- Tool : Pycharm
- PC와 NAS는 다른 네트워크
- PC와 NAS는 각각 Internet이 가능한 상태
pandas module을 처음 쓰다보니 생각보다 parsing 작업을 진행하는데 시간이 걸렸다.
알고보면 정말 간단한데, 아무래도 pandas의 기능이 다양하다보니 더 좋은 방법을 찾아보려 시간이 더 걸렸던 것 같다.
먼저 pandas의 기본적인 사용법은 다음 사이트를 참고했다.
https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html#min
거두절미하고 소스를 보여드리고 설명을 이어나가겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/usr/bin/python
import mysql.connector as mariadb
from mysql.connector import Error
import pandas as pd
try:
connection = mariadb.connect(host='#07의 2번에서 확인한 NAS DDNS의 외부주소', user='#06의 3번에서 확인한 user 명 입력', port='#06의 6번에서 확인된 Port 번호 입력', password='#06의 3번에서 login에 사용되는 password 입력', database='#06의 4번에서 확인된 db 명 입력')
if connection.is_connected():
db_Info = connection.get_server_info()
print("Connected to MySQL database... MySQL Server version on ", db_Info)
cursor = connection.cursor(prepared=True)
cursor.execute("select database()")
record = cursor.fetchone()
print("Your connected to -", record)
df = pd.read_csv('C:\Data\\20190624-14-32-30-646.txt',
skiprows=1,
skipfooter=1027,
sep='\t')
print(df)
id = 1
date_time = df.iloc[0,0]
print("date_time : ", date_time)
time_rms = df.iloc[0,5]
print("time_rms : ", time_rms)
time_peak = df.iloc[0, 4]
print("time_peak : ", time_peak)
time_crest_factor = df.iloc[0, 6]
print("time_crest_factor : ", time_crest_factor)
frequency_peak_1 = df.iloc[0, 8]
print("frequency_peak_1 : ", frequency_peak_1)
frequency_peak_2 = df.iloc[0, 10]
print("frequency_peak_2 : ", frequency_peak_2)
frequency_peak_3 = df.iloc[0, 12]
print("frequency_peak_3 : ", frequency_peak_3)
frequency_peak_4 = df.iloc[0, 14]
print("frequency_peak_4 : ", frequency_peak_4)
frequency_peak_5 = df.iloc[0, 16]
print("frequency_peak_5 : ", frequency_peak_5)
frequency_peak_6 = df.iloc[0, 18]
print("frequency_peak_6 : ", frequency_peak_6)
frequency_band_1 = df.iloc[0, 9]
print("frequency_band_1 : ", frequency_band_1)
frequency_band_2 = df.iloc[0, 11]
print("frequency_band_2 : ", frequency_band_2)
frequency_band_3 = df.iloc[0, 13]
print("frequency_band_3 : ", frequency_band_3)
frequency_band_4 = df.iloc[0, 15]
print("frequency_band_4 : ", frequency_band_4)
frequency_band_5 = df.iloc[0, 17]
print("frequency_band_5 : ", frequency_band_5)
frequency_band_6 = df.iloc[0, 19]
print("frequency_band_6 : ", frequency_band_6)
except Error as e:
print("Error while connecting to MySQL", e)
connection.rollback()
print("Failed to read insert into MySQL table {}".format(e))
finally:
# closing database connection
if(connection.is_connected()):
cursor.close()
connection.close()
print("MySQL connection is closed")
| cs |
위 소스를 보면 #8에서 몇몇 부분이 추가된 것을 알 수 있다. 해당 부분들을 확인해보겠다.
df = pd.read_csv('C:\Data\\20190624-14-32-30-646.txt',
skiprows=1,
skipfooter=1027,
sep='\t')
print(df)
pd는 pandas module의 macro를 의미하고 read_csv 함수를 이용해 파일을 불러오게 된다.
이 때, parameter들은 다음과 같다.
(1) file location
(2) skiprows : text file에서 맨 윗줄부터 1번째 줄까지 skip한다.
(3) skipfooter : text file에서 맨 아랫줄부터 1027번째 줄까지 skip한다.
(4) sep : '\t' (Tab)을 기준으로 column을 나눈다.
위와같은 parameter를 이용하여 원본 text file인 1029 x 1 형태를 1 x 21 로 만들어 내게 된다.
필자의 상황에서는 text file에서 3번째 줄만 필요했기 때문에 2번째 줄을 column으로 만들고 3번째 줄을 data로 만든 것이다.
id = 1
date_time = df.iloc[0,0]
print("date_time : ", date_time)
time_rms = df.iloc[0,5]
print("time_rms : ", time_rms)
time_peak = df.iloc[0, 4]
print("time_peak : ", time_peak)
time_crest_factor = df.iloc[0, 6]
print("time_crest_factor : ", time_crest_factor)
frequency_peak_1 = df.iloc[0, 8]
print("frequency_peak_1 : ", frequency_peak_1)
frequency_peak_2 = df.iloc[0, 10]
print("frequency_peak_2 : ", frequency_peak_2)
frequency_peak_3 = df.iloc[0, 12]
print("frequency_peak_3 : ", frequency_peak_3)
frequency_peak_4 = df.iloc[0, 14]
print("frequency_peak_4 : ", frequency_peak_4)
frequency_peak_5 = df.iloc[0, 16]
print("frequency_peak_5 : ", frequency_peak_5)
frequency_peak_6 = df.iloc[0, 18]
print("frequency_peak_6 : ", frequency_peak_6)
frequency_band_1 = df.iloc[0, 9]
print("frequency_band_1 : ", frequency_band_1)
frequency_band_2 = df.iloc[0, 11]
print("frequency_band_2 : ", frequency_band_2)
frequency_band_3 = df.iloc[0, 13]
print("frequency_band_3 : ", frequency_band_3)
frequency_band_4 = df.iloc[0, 15]
print("frequency_band_4 : ", frequency_band_4)
frequency_band_5 = df.iloc[0, 17]
print("frequency_band_5 : ", frequency_band_5)
frequency_band_6 = df.iloc[0, 19]
print("frequency_band_6 : ", frequency_band_6)
위 코드를 보면 df.iloc을 사용해 원하는 position의 data를 획득하는 것을 알 수 있다.
결과는 다음과 같다.
필자가 여기서 사용한 pandas의 함수는 극히 일부에 지나지 않는다.
위에서 알려준 사이트를 참고하여 본인의 필요에 맞는 코딩을 해나가면 되겠다.
댓글 없음:
댓글 쓰기