首页 > 解决方案 > Txt 到 csv 格式的行和列 [python]

问题描述

需要帮助将 txt 文件转换为行和列完整的 csv。文本文件在这里:(http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2020&MONTH=06&FROM=2300&TO=2300&STNM=72265

目前我只有这个...

df = pd.read_csv('sounding-72265-2020010100.txt',delimiter=',')
df.to_csv('sounding-72265-2020010100.csv')

但它只有一列,所有其他列都在其行内。而是想将其格式化为这样的

CSV 格式

谢谢你的帮助

标签: python

解决方案


我假设您可以从从网站复制的文本开始;data.txt即您通过复制/粘贴创建一个如下所示的文件:

1000.0      8                                                               
  925.0    718                                                               
  909.0    872   39.6    4.6     12   5.88     80      7  321.4  340.8  322.5
  900.0    964   37.6   11.6     21   9.62     75      8  320.2  351.3  322.1
  883.0   1139   36.6    7.6     17   7.47     65      9  321.0  345.3  322.4
...
...
...

然后以下工作,主要基于这个答案

import pandas as pd

df = pd.read_table('data.txt', header=None, sep='\n')
df = df[0].str.strip().str.split('\s+', expand=True)

您读取的数据仅由新行分隔,生成一列df。然后使用字符串方法来格式化条目并将它们扩展成一个新的 DataFrame。

然后,您可以在此答案的帮助下添加列名:

col1 = 'PRES   HGHT   TEMP   DWPT   RELH   MIXR   DRCT   SKNT   THTA   THTE   THTV'.split()
col2 = 'hPa     m      C      C      %    g/kg    deg   knot     K      K      K '.split()

df.columns = pd.MultiIndex.from_tuples(zip(col1,col2), names = ['Variable','Unit'])

结果(df.head()):

Variable    PRES  HGHT  TEMP  DWPT  RELH  MIXR  DRCT  SKNT   THTA   THTE   THTV
Unit         hPa     m     C     C     %  g/kg   deg  knot      K      K      K
0         1000.0     8  None  None  None  None  None  None   None   None   None
1          925.0   718  None  None  None  None  None  None   None   None   None
2          909.0   872  39.6   4.6    12  5.88    80     7  321.4  340.8  322.5
3          900.0   964  37.6  11.6    21  9.62    75     8  320.2  351.3  322.1
4          883.0  1139  36.6   7.6    17  7.47    65     9  321.0  345.3  322.4

实际上,如果是我,我可能会删除“单位”列名,b/c 我认为多索引列会使切片变得更加复杂。

同样,读取数据和列名都假定您可以将它们复制粘贴到文本文件/Python 中,然后解析。如果您正在阅读许多这样的页面,或者想要进行某种网页抓取,那将需要额外的工作。


推荐阅读