【问题标题】:Read_fwf not reading negative numbersRead_fwf 不读取负数
【发布时间】:2019-06-03 08:26:01
【问题描述】:

我正在读取一个 txt 文件来计算 MetPy 中的 skewT 例程,但是我的负数没有被读取。

根据教程我尝试读取一个txt文件,我稍微修改了原来的命令

col_names = ['pressure', 'height', 'temperature', 'dewpoint', 'direction', 'speed']
pd.read_fwf('addbna.txt', usecols=[0, 1, 2, 3, 6, 7], names=col_names)

第一行是红色的,没有问题,当有负数时,我的问题开始了,减号完全被忽略了。

这些是我正在使用的文件

https://drive.google.com/open?id=1FOGDNk9fkUooTT2NJCQgpe_12l3sprSl https://drive.google.com/open?id=1aVKeokDOW01Ol8l0UubhTSjqjN6gTCCC

【问题讨论】:

  • 您需要发布文件的前几行,read_fwf 用于读取固定宽度的文件,那么您的文本文件是逗号分隔,制表符,固定宽度吗?等等。
  • 文件是固定宽度的,但是我不能充分地发布它
  • 我觉得某处的数据文件有问题。您可以上传文件或指向我们可以获得示例文件的地方吗?如果不查看数据,我认为任何人都无法提供帮助。

标签: pandas negative-number metpy


【解决方案1】:

pd.read_fwf() 函数具有关键字选项infer_nrows,它允许您指示pd.read 进一步查看您的DataFrame 以推断列宽应该有多宽。我必须将我的默认值 100 更改为 1000,才能在我们的探测中找到第一个负值实例(以 1 秒分辨率记录)。

我最后的阅读指令变成了:

df = pd.read_fwf('some_sounding_data.txt', header=0, skiprows=(1,2), infer_nrows=1000)

【讨论】:

    【解决方案2】:

    这里有点晚了,但我遇到了完全相同的问题。

    我怀疑这与温度列不是固定宽度有关。我的数据集以 28.4、27.6 等(宽度为 4)等数字开头,但一旦它最终低于 -10.0(宽度为 5),减号就不会包含在数据框温度列中。

    我通过直接编辑文本文件并在第一个温度数据前面添加“0”以将其填充为 5 的宽度(28.4 变为“028.4”),找到了一种解决方法。我认为如果这是 read_fwf() 读取的第一行,它假定该列的其余部分是宽度 5,并且不会忽略减号。

    希望聪明的头脑能找到更好的解决方案。我从 csv 文件中绘制 skewT 没有问题,所以如果你能以某种方式转换你的文件,这可能是解决问题的另一种方法。

    【讨论】:

    • 就我而言,搞砸一切的是行数。该程序不需要大量数据(我使用了 200 多行),所以当我减少到少于 30 行时,一切正常
    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多