【问题标题】:Multiply int column by float constant pandas dataframe [duplicate]将 int 列乘以浮点常量 pandas 数据帧 [重复]
【发布时间】:2013-07-24 00:12:35
【问题描述】:

我有一堆翻斗式降雨数据记录为每分钟间隔的提示数。我已将其上传到 pandas 数据框,我需要能够将每个单独的列乘以 mm/tip 校准因子,但列是 int 类型,而因子是 float 类型。我试过了:

df['Series'] = df['Series'].mul(constant) -> TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

df['Series'] *= constant -> TypeError: can't multiply sequence by non-int of type 'float'

df['Series'] = df['Series'].astype(float) * 常量 -> ValueError:无法将字符串转换为浮点数:

必须有一个简单的方法来做到这一点...帮助?

编辑:

我的数据如下所示:

我是这样读的:

    def loaddata(filepaths):
        t1 = time.clock()
        for i,filepath in enumerate(filepaths):
            xl = pd.ExcelFile(filepath)
            df = xl.parse(xl.sheet_names[0], header=0, index_col=2, skiprows=[0,2,3,4], parse_dates=True)
            df = df.dropna(axis=1, how='all') 
            df = df.drop(['Decimal Year Day', 'Decimal Year Day.1', 'RECORD'], axis=1)
            df.index = pd.DatetimeIndex(((df.index.asi8/(1e9*60)).round()*1e9*60).astype(np.int64)).values

    return df

files = ["London Water Balance.xlsx"]
Water = loaddata(files)

这是数据类型

Water.dtypes

[L] Drainage NE             float64
[L] Drainage SE              object
[L] Embedded raingauge E     object
[L] External raingauge       object
dtype: object

【问题讨论】:

  • 请显示您的数据以及您如何读取数据。同时发布df.dtypes,您可能拥有object dtype 数据(嵌入None)。您可以在阅读时转换(最佳方式)或df.convert_objects())。事情需要是正确的 dtype 才能提高效率。
  • 我刚刚编辑了这个问题。我认为您对 dtype 的看法是正确的。在这种情况下,最好的转换方式是什么?
  • 尝试 df.convert_objects(convert_numeric=True) 将强制它为数字列并将非数字设置为 nan
  • 我应用了这个命令,输出确认所有列现在都是浮点数 64。我在使用 *= 运算符后立即乘以我的常数,但仍然得到一个类型错误,“TypeError: can't multiply sequence通过非“浮点”类型的整数”
  • 实际上这就像一个魅力!谢谢!我忘记将转换的输出分配给数据框。

标签: python pandas constants dataframe


【解决方案1】:

试试:

df.convert_objects(convert_numeric=True)

将其强制为数字列并将非数字元素设置为nan

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2023-03-21
    • 2019-06-29
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多