Извлечь строку из ячейки CSV, содержащей специальные символы в Python - PullRequest
0 голосов
/ 26 июня 2018

Я пишу программу на Python для извлечения определенных значений из каждой ячейки в столбце файла .CSV , а затем делает все извлеченные значения новыми столбцами .

Пример ячейки столбца: (На самом деле это небольшая часть, реальная ячейка содержит гораздо больше данных)

AudioStreams":[{"JitterInterArrival":10,"JitterInterArrivalMax":24,"PacketLossRate":0.01353227,"PacketLossRateMax":0.09027778,"BurstDensity":null,"BurstDuration":null,"BurstGapDensity":null,"BurstGapDuration":null,"BandwidthEst":25245423,"RoundTrip":520,"RoundTripMax":11099,"PacketUtilization":2843,"RatioConcealedSamplesAvg":0.02746676,"ConcealedRatioMax":0.01598402,"PayloadDescription":"SIREN","AudioSampleRate":16000,"AudioFECUsed":true,"SendListenMOS":null,"OverallAvgNetworkMOS":3.487248,"DegradationAvg":0.2727518,"DegradationMax":0.2727518,"NetworkJitterAvg":253.0633,"NetworkJitterMax":1149.659,"JitterBufferSizeAvg":220,"JitterBufferSizeMax":1211,"PossibleDataMissing":false,"StreamDirection":"FROM-to-

Одно значение, которое я пытаюсь извлечь, это число 10 между"JitterInterArrival": и ,"JitterInterArrivalMax".Но поскольку каждая ячейка содержит относительно длинные строки и специальные символы вокруг нее (например, ""), opener=re.escape(r"***") и closer=re.escape(r"***") не будут работать.

Кто-нибудь знает лучшее решение?Большое спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

IIUC, у вас есть строка json и вы хотите получить значения из ее атрибутов.Итак, учитывая

s = '''
{"AudioStreams":[{"JitterInterArrival":10,"JitterInterArrivalMax":24,"PacketLossRate":0.01353227,"PacketLossRateMax":0.09027778,"BurstDensity":null,
                  "BurstDuration":null,"BurstGapDensity":null,"BurstGapDuration":null,"BandwidthEst":25245423,"RoundTrip":520,"RoundTripMax":11099,"PacketUtilization":2843,"RatioConcealedSamplesAvg":0.02746676,"ConcealedRatioMax":0.01598402,"PayloadDescription":"SIREN","AudioSampleRate":16000,"AudioFECUsed":true,"SendListenMOS":null,"OverallAvgNetworkMOS":3.487248,"DegradationAvg":0.2727518,
                  "DegradationMax":0.2727518,"NetworkJitterAvg":253.0633,
                  "NetworkJitterMax":1149.659,"JitterBufferSizeAvg":220,"JitterBufferSizeMax":1211,
                  "PossibleDataMissing":false}]}
'''

Вы можете сделать

import json
>>> data = json.loads(s)
>>> ji = data['AudioStreams'][0]['JitterInterArrival']
10

В сценарии фрейма данных, если у вас есть столбец col строк, таких как выше, например,

df = pd.DataFrame({"col": [s]})

Вы можете использовать transform, передав json.loads в качестве аргумента

df.col.transform(json.loads)

, чтобы получить Series словарей.Затем вы можете манипулировать этими диктовками или просто получать доступ к данным, как было сделано выше.

...