#python #csv #simplekml
#python #csv #simplekml
Вопрос:
Вот код python, который берет данные из моего запроса и упаковывает их для перехода в файл csv.
...
col_headers = [ i[0] for i in cursor.description ]
rows = [ list(i) for i in cursor.fetchall()]
df = pd.DataFrame(rows, columns=col_headers)
df.to_csv("PremiseCPE.csv", index=False)
for row in cursor.fetchall():
print (row)
...
Входящие данные представлены в столбцах. Мне нужно добавить дополнительный столбец (# 6) под названием «Метки».
Затем мне нужно добавить значения в новую строку столбца для каждого вывода из базы данных на основе значений в столбце # 3, который называется cpeStatus. Ниже приведен тип структуры запроса, который я пробовал при создании файла kml:
...
iif (row[4]) = 'Off', (row[6]) = "http://maps.google.com/mapfiles/kml/shapes/forbidden.png"
ElseIf (row[4]) = 'Active', (row[6]) = "http://maps.google.com/mapfiles/kml/shapes/ranger_station.png"
ElseIf (row[4]) = 'Ready, (row[6]) = "http://maps.google.com/mapfiles/kml/shapes/mechanic.png"
ElseIf (row[4]) = 'Alarm', (row[6]) = "http://maps.google.com/mapfiles/kml/shapes/caution.png"
ElseIf (row[4]) = 'Null', (row[6]) = "http://maps.google.com/mapfiles/kml/shapes/white_bubble.png"
End If
...
Цель состоит в том, чтобы попытаться запустить это на уровне файла csv.
Кто-нибудь может помочь?
Комментарии:
1. CSV — это плоский текстовый файл, вы не можете поместить в него логику, как в Excel. Вам нужно будет изменить свой фрейм данных, используя вашу логику, а затем записать его в CSV в конце.
Ответ №1:
Как говорит @MattDMo, вам нужно сделать это в dataframe перед записью CSV. Кроме того, я предпочитаю поиск по словарю long if...elif...else
в python. Наконец, я предлагаю использовать pd.read_sql для запроса к базе данных и создания df.
import pandas as pd
col_headers = ['col1', 'cols2', 'yada', 'cpeStatus', 'murgatroyd', 'noimagination']
rows = [[1, 2, 3, 'Off', 'is', 42],
[2, 4, 42, 'Active', 'the', 42],
[3, 9, 12, 'Ready', 'best', 42],
[4, 16, 20, 'Off', 'name', 42],
[5, 25, 30, 'Alarm', 'no', 42],
[6, 36, 42, 'Null', 'its', 42],
[7, 49, 56, 'Danger', 'not', 42],]
df = pd.DataFrame(rows, columns=col_headers)
plmks = {'Off': "forbidden.png",
'Active': "ranger_station.png",
'Ready': "mechanic.png",
'Alarm': "caution.png",
'Null': "white_bubble.png"}
df['Placemarks'] = [plmks.get(st, "headslap.png") for st in df['cpeStatus']]
print(df)
df.to_csv("PremiseCPE.csv", index=False)
выдает следующий df:
0 1 2 3 Off is 42 forbidden.png
1 2 4 42 Active the 42 ranger_station.png
2 3 9 12 Ready best 42 mechanic.png
3 4 16 20 Off name 42 forbidden.png
4 5 25 30 Alarm no 42 caution.png
5 6 36 42 Null its 42 white_bubble.png
6 7 49 56 Danger not 42 headslap.png
и следующий CSV:
col1,cols2,yada,cpeStatus,murgatroyd,noimagination,Placemarks
1,2,3,Off,is,42,forbidden.png
2,4,42,Active,the,42,ranger_station.png
3,9,12,Ready,best,42,mechanic.png
4,16,20,Off,name,42,forbidden.png
5,25,30,Alarm,no,42,caution.png
6,36,42,Null,its,42,white_bubble.png
7,49,56,Danger,not,42,headslap.png
Комментарии:
1. Спасибо, я попробую это. Я просто работал, чтобы посмотреть, смогу ли я заставить базу данных внести изменения, аналогичные тому, как я могу создать изменение в Excel:
2. @rcrlii большое спасибо за помощь. Пришлось внести некоторые незначительные изменения, но теперь он работает!