python - 使用 Pandas 从 .txt 文件创建 DataFrame

标签 python pandas dataframe

我在使用 pandas 将 .txt 文件转换为浮点值的数据帧时遇到问题。我需要创建两列数据的散点图,但我不断收到错误“TypeError:空'DataFrame':没有要绘制的数字数据”,所以我认为它将数据作为字符串读取。

我正在读取的文件有 9,000 行。我在开头跳过几行,因为它们只是文本。当我只运行代码的第一行时,它似乎创建了一个合法的数据框,但随后尝试制作散点图最终不起作用。列的名称位于文件中数据值的前面。我试图绘制散点图的两个是“Xpos”与“Ypos”。

我的代码非常简单:

df = pd.read_csv('data.txt', sep='|', skiprows=44)
df.plot(x='Xpos', y='Ypos')

这是数据帧前 20 行的示例

Note HHVA Xpos Ypos ... B-V u_B-V e_Vmag e_B-V 2 10001 47.22 68.87 ... 0.731 0.010 0.010 3 10002 62.38 38.89 ... 0.921 0.010 0.010 4 10003 207.27 371.05 ... 0.884 0.010 0.010 5 10004 146.39 208.01 ... 0.791 0.010 0.010 6 10005 189.39 294.75 ... 1.392 0.011 0.016 7 * 10006 205.68 475.89 ... 0.645 0.013 0.015 8 * 10007 273.94 244.41 ... 0.546 0.004 0.009 9 * 10008 159.47 126.65 ... 0.593 0.009 0.012 10 * 10009 99.21 294.68 ... 0.622 0.010 0.012 11 * 10010 215.65 20.32 ... 0.558 0.005 0.009 12 * 10011 96.96 473.71 ... 0.582 0.009 0.011 13 10012 126.02 401.93 ... 1.174 0.010 0.013 14 * 10013 109.47 262.02 ... 0.557 0.010 0.013 15 * 10014 92.94 444.24 ... 0.569 0.008 0.012 16 10015 174.44 469.01 ... 0.554 0.012 0.015 17 * 10016 17.07 427.70 ... 0.549 0.013 0.016 18 10017 232.49 385.61 ... 0.781 0.007 0.011 19 10018 241.99 189.83 ... 0.511 0.024 0.029 20 * 10019 262.88 360.47 ... 0.544 0.004 0.008 21 * 10020 110.98 142.96 ... 0.535 0.011 0.014

这是我运行 df.info 时得到的结果

<class 'pandas.core.frame.DataFrame'> Int64Index: 20 entries, 2 to 21 Data columns (total 10 columns): Note 20 non-null object HHVA 20 non-null object Xpos 20 non-null object Ypos 20 non-null object Vmag 20 non-null object u_Vmag 20 non-null object B-V 20 non-null object u_B-V 20 non-null object e_Vmag 20 non-null object e_B-V 20 non-null object dtypes: object(10) memory usage: 1.7+ KB None

u_Vmag 和 u_B-V 列中没有任何测量值。

我觉得我错过了一些显而易见的东西。大家有什么建议吗?

最佳答案

pandas.read_csv()将输入数据转换为输入数据的函数。由于非数字数据和向上转换为对象,read_csv() 无法检测输入类型。

import pandas as pd
import numpy as np
from pandas.compat import StringIO
print(pd.__version__)

data = """
Note|HHVA|Xpos|Ypos|B-V|e_Vmag|e_B-V
1|10001|71.20|68.87|0.731|0.010|0.010
2|10001| |68.87|0.731|0.010|0.010
"""

def myconverter(x):
    try:
        f = float(x)
    except ValueError as ve:
        return np.nan
    return f

df = pd.read_csv(StringIO(data), converters={'Xpos':myconverter}, sep='|', skiprows=0)
print(df.dtypes)

产品

0.24.2
Note        int64
HHVA        int64
Xpos      float64
Ypos      float64
B-V       float64
e_Vmag    float64
e_B-V     float64

关于python - 使用 Pandas 从 .txt 文件创建 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063023/

相关文章:

python - 发送附件 'file'时Django 1.5错误对象没有属性 '__getitem__'

python - 如何从 Python 中解析 MySQL 内置代码?

python 3.8.0 - 在新行上打印带有变量值的自记录表达式

python - Pandas 日期时间格式不一致

python - 查找 Excel/CSV 文件的实际列引用 - Python Pandas

python - 将数据框列值转换为新列

python - matplotlib 中 plt.draw() 和 plt.show() 的区别

python - 在 python/pandas 中一次更改多列的数据类型

python - 按 GroupBy 内容过滤 Pandas DataFrame

python : speed dating & permutation