Как убрать лишние запятые из данных в Python - PullRequest
0 голосов
/ 23 октября 2019

У меня есть файл CSV, через который я пытаюсь загрузить данные в свою таблицу SQL, содержащую 2 столбца. У меня есть 2 столбца, и данные разделены запятыми, которые определяют следующее поле. Второй столбец содержит текст и несколько запятых в этом тексте. Из-за лишних запятых я не могу загрузить данные в свою таблицу SQL, так как в ней есть дополнительные столбцы. У меня есть миллионы строк данных. Как я могу удалить эти лишние запятые?

Данные:

Number Address
"12345" , "123 abc street, Unit 345"
"67893" , "567 xyz lane"
"65432" , "789 unit, mno street"

Я хотел бы удалить лишние запятые в адресах в случайных строках.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Если все ваши данные будут в том же формате, что и Number Address "000" , "000 abc street, Unit 000", вы можете разделить список, удалить запятую и снова собрать список, сделав его снова строкой. Например, используя данные, которые вы указали:

ori_addr = "Number Address \"12345\" , \"123 abc street, Unit 345\""
addr = ori_addr.split()
addr[6] = addr[6].replace(",", "")
together_addr = " ".join(addr)

Together_addr равен «Числовой адрес« 12345 »,« 123 abc street Unit 345 », обратите внимание, что между« street »и« Unit »нет запятой.

0 голосов
/ 23 октября 2019

Правки:

  • Следуя комментариям пользователя, добавили неверный адрес в этот тест. Этот адрес загружается в базу данных без проблем.
  • Добавлен код для хранения CSV-адресов в MySQL.

Ответ:

Приведенный ниже код выполняет следующие действия:

  • База данных MySQL engine (соединение) создано.
  • Данные адреса (номер, адрес), считанные из файла CSV.
  • Запятые, не разделяющие поля, заменены из источникаданные и лишние пробелы удалены.
  • Отредактированные данные, переданные в DataFrame
  • DataFrame, используемый для хранения данных в MySQL.
    import csv
    import pandas as pd
    from sqlalchemy import create_engine

    # Set database credentials.
    creds = {'usr': 'admin',
             'pwd': '1tsaSecr3t',
             'hst': '127.0.0.1',
             'prt': 3306,
             'dbn': 'playground'}
    # MySQL conection string.
    connstr = 'mysql+mysqlconnector://{usr}:{pwd}@{hst}:{prt}/{dbn}'
    # Create sqlalchemy engine for MySQL connection.
    engine = create_engine(connstr.format(**creds))

    # Read addresses from mCSV file.
    text = list(csv.reader(open('comma_test.csv'), skipinitialspace=True))

    # Replace all commas which are not used as field separators.
    # Remove additional whitespace.
    for idx, row in enumerate(text):
        text[idx] = [i.strip().replace(',', '') for i in row]

    # Store data into a DataFrame.
    df = pd.DataFrame(data=text, columns=['number', 'address'])
    # Write DataFrame to MySQL using the engine (connection) created above.
    df.to_sql(name='commatest', con=engine, if_exists='append', index=False)

SourceФайл (comma_test.csv):

"12345" , "123 abc street, Unit 345"
"10101" , "111 abc street, Unit 111"
"20202" , "222 abc street, Unit 222"
"30303" , "333 abc street, Unit 333"
"40404" , "444 abc street, Unit 444"
"50505" , "abc DR, UNIT# 123 UNIT 123"

Неотредактированные данные:

['12345 ', '123 abc street, Unit 345']
['10101 ', '111 abc street, Unit 111']
['20202 ', '222 abc street, Unit 222']
['30303 ', '333 abc street, Unit 333']
['40404 ', '444 abc street, Unit 444']
['50505 ', 'abc DR, UNIT# 123 UNIT 123']

Отредактированные данные:

['12345', '123 abc street Unit 345']
['10101', '111 abc street Unit 111']
['20202', '222 abc street Unit 222']
['30303', '333 abc street Unit 333']
['40404', '444 abc street Unit 444']
['50505', 'abc DR UNIT# 123 UNIT 123']

Запрос из MySQL:

number  address
12345   123 abc street Unit 345
10101   111 abc street Unit 111
20202   222 abc street Unit 222
30303   333 abc street Unit 333
40404   444 abc street Unit 444
50505   abc DR UNIT# 123 UNIT 123

Благодарность:

Это многословный подход. Тем не менее, каждый шаг был преднамеренно разбит на части, чтобы четко показать соответствующие шаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...