панды считывают текстовые данные IRS, разделенные пробелами

#pandas #txt

#панды #txt

Вопрос:

Недавно я работал с данными налогового файла IRS. Это текстовые данные, разделенные пробелами, как показано ниже (полные данные здесь):

введите описание изображения здесь

В способе хранения данных есть некоторые закономерности. Но для меня данные не отформатированы стандартным образом, и их нелегко читать в Pandas. Мне было интересно, как получить фрейм данных, подобный следующему, из приведенных выше текстовых данных:

  ------------ ------------- -------------------------- ----- ----- ----- ------ 
| fips_state | fips_county |           name           | c1  | c2  | c3  |  c4  |
 ------------ ------------- -------------------------- ----- ----- ----- ------ 
|         02 |         013 | Aleutians East Borough T | 145 | 280 | 416 | 1002 |
|         02 |         016 | Aleutians West Total Mig | 304 | 535 | 991 | 2185 |
|        ... |         ... | ...                      | ... | ... | ... |  ... |
 ------------ ------------- -------------------------- ----- ----- ----- ------ 
  

Ответ №1:

Это позволит вам распределить данные по столбцам в двух отдельных фреймах данных внутри pandas или до создания ваших списков. После синтаксического анализа объедините два фрейма данных.

 import urllib.request  # the lib that handles the url stuff

target_url='https://raw.githubusercontent.com/shuai-zhou/DataRepo/master/data/C9091aki.txt'
list_a = []
list_b = []
for line in urllib.request.urlopen(target_url):
    if line.decode('utf-8')[0:2] != '  ':
        print(line.decode('utf-8').strip())
        list_a.append(line.decode('utf-8').strip())
    if line.decode('utf-8')[0:5] == '     ':
        print(line.decode('utf-8').strip())
        list_b.append(line.decode('utf-8').strip())
 
dfa = pd.DataFrame(list_a)
dfb = pd.DataFrame(list_b)