将字段中带有逗号的.csv文件转换为JSON/TXT

2024-09-30 00:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个逗号分隔的.csv文件,其中包含数据,在其字段中包含逗号(在文本中,表示小数等)。 数据的形状实际上是数据帧,所以稍后我将使用pandas。 如何使用pandas读取此类文件,或者将其转换为制表符分隔的.txt文件或JSON文件。你知道吗

这个文件有3.5 MB大,大约有700行。下面是标题和两行数据的示例。在文件中,没有空行-我在这里做了它们,只是为了让它更可读。 由于数据是在网上搜集的,我不得不删除两个变量(response和requesturl)。你知道吗

Tehnicne_podrobnosti,RESPONSE_DATE,RESPONSE_TIME

"Klikni za povečavo Dodaj v primerjavo Dodatne slike: Intel Pentium® Dual-Core G4560 "BOX" Redna cena: 67,63€ Spletna cena: 62,62€ Prihranek: 5,01€ Garancija: 36 mesecev EAN : 5032037095693 Tehnični podatki: Tip procesorja:Pentium® Dual-CoreJedro:Kaby LakeFrekvenca procesorja:3500 MHzPodnožje procesorja:Socket 1151Tehnologija izdelave:0.014 µmPredpomnilnik:3072 kBFrekvenca FSB/HT: Tip jedra:Dual Core Opis: Dvojederni procesor Intel Pentium G4560 je del serije procesorjev s kodnim imenom Kaby Lake in je narejen v 14 nanometrskem proizvodnem procesu. Deluje na frekvenci 3,5 GHz. Na voljo je 3 MB Cache predpomnilnika. Za delovanje porablja do 54 W (TDP) energije. Za delovanje potrebujete osnovno ploščo s podnožjem LGA1151.Vgrajena je nova generacija Intelove integrirane grafike Intel® HD Graphics 610, ki deluje na frekvenci 350 MHz/1,15 GHz. Podpira DirectX 12, OpenGL 4.4 ter ločljivosti do 4096x2304 @60Hz preko DisplayPort in 4096x2304 @24Hz preko HDMI 1.4. Podpira do 3 zaslone naenkrat.Dodatne lastnosti procesorja Pentium® Dual-Core G4560:* Število niti (threads): 4* GPU Frekvenca: do 1050 MHz* Tip GPU: HD Graphics 610 (podpora DirectX 12)* TDP: 54 W* Podpora DDR3L: 1333/1600 MHz@ 1.35V* Podpora DDR4: 2133/2400 MHz* Inštrukcije: MMX, AES-NI, CLMUL, FMA3, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, TXT, TSX, SGX, VT-x","05.26.2017","10:01:50"

"Klikni za povečavo Dodaj v primerjavo Dodatne slike: Intel Core™ i5 7400 "BOX" Redna cena: 213,06€ Spletna cena: 197,29€ Prihranek: 15,77€ Garancija: 36 mesecev EAN : 5032037092982 Tehnični podatki: Tip procesorja:Core™ i5Jedro:Kaby LakeFrekvenca procesorja:3000 MHzPodnožje procesorja:Socket 1151Tehnologija izdelave:0.014 µmPredpomnilnik:6144 kBFrekvenca FSB/HT: Tip jedra:Quad Core Opis: Štirijedrni procesor Intel Core i5-7400 je del serije procesorjev s kodnim imenom Kaby Lake in je narejen v 14 nanometrskem proizvodnem procesu. Deluje na frekvenci 3,0 GHz, s Turbo Boost tehnologijo pa se frekvenca poveča na 3,5 GHz. Na voljo je 6 MB Cache predpomnilnika. Za delovanje porablja do 65 W (TDP) energije. Za delovanje potrebujete osnovno ploščo s podnožjem LGA1151.Vgrajena je nova generacija Intelove integrirane grafike Intel® HD Graphics 630, ki deluje na frekvenci 350 MHz/1,0 GHz. Podpira DirectX 12, OpenGL 4.4 ter ločljivosti do 4096x2304 @60Hz preko DisplayPort in 4096x2304 @24Hz preko HDMI 1.4. Podpira do 3 zaslone naenkrat.Ponuja do 16 PCI express linij.Tu je funkcija Turbo Boost 2.0, ki ob ustrezno nizki temperaturi procesorja ob obremenitvi dvigne frekvenco procesorja. Pospešek je odvisen od števila obremenenjenih jeder.Dodatne lastnosti procesorja Intel® Core™ i5 7400:* Število niti (threads): 4* GPU Frekvenca: do 1000 MHz* Tip GPU: HD Graphics 630 (podpora DirectX 12)* Turbo frekvenca: 3,5 GHz* TDP: 65 W* Podpora DDR3L: 1333/1600 MHz@ 1.35V* Podpora DDR4: 2133/2400 MHz* Inštrukcije: MMX, AES-NI, CLMUL, FMA3, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, TXT, TSX, SGX, VT-x, VT-d","05.26.2017","10:01:58"

对最有效的解决方案有什么建议吗?你知道吗


Tags: 文件数据coredonajetipmhz
1条回答
网友
1楼 · 发布于 2024-09-30 00:28:37

问题似乎是"BOX"没有正确的双引号。一种解决方法是将其双引号,然后将其传递给Python的CSV来创建行。然后可以使用这些文件加载到数据帧中:

import csv
from StringIO import StringIO
import pandas as pd

data = []

with open('input.csv', 'r') as f_input:
    for line_number, raw_row in enumerate(f_input, start=1):
        cols = raw_row.rsplit(',', 4)
        cols[0] = '"{}"'.format(cols[0].strip('"').replace('"', '""'))
        row = next(csv.reader(StringIO(','.join(cols))))
        data.append(row)

df = pd.DataFrame(data[1:], columns=data[0])
df['DATE_TIME'] = pd.to_datetime(df.RESPONSE_DATE + " " + df.RESPONSE_TIME, format="%m.%d.%Y %H:%M:%S")
df.drop(['RESPONSE_DATE', 'RESPONSE_TIME'], axis=1, inplace=True)

print df

这是通过假设只有第一列存在双引号问题来实现的。它将原始行右拆分两次,从第一列中删除外部双引号,然后用""替换所有"。然后它重建原始行并将其传递给CSV以创建一行。你知道吗

给你:

                                Tehnicne_podrobnosti RESPONSE_CODE      URL           DATE_TIME
0  Klikni za povečavo Dodaj v primerjavo Dodatne ...           405  http:// 2017-05-26 10:01:50
1  Klikni za povečavo Dodaj v primerjavo Dodatne ...           404  http:// 2017-05-26 10:01:58

RESPONSE_DATERESPONSE_TIME列也被合并并转换成datetime对象。你知道吗

4假设有四个正常列和一个有问题的列,也就是说,为了测试,我模拟了额外的两个列,以获得一个响应代码和一个URL。 在Python2.x上测试

相关问题 更多 >

    热门问题