gpt4 book ai didi

python - 使用转换函数将列值转换为 float

转载 作者:行者123 更新时间:2023-12-01 00:03:15 24 4
gpt4 key购买 nike

给定以下 CSV

+-------------------------------+-------------+--------------------+--------------+
| Timestamp | DoublePoint | HexPoint | BooleanPoint |
+-------------------------------+-------------+--------------------+--------------+
| 07/23/2019 16:53:12.523-07:00 | 0.0 | 0x0000000000000001 | True |
| 07/23/2019 16:53:14.519-07:00 | 0.0 | 0x0000000000000002 | False |
| 07/23/2019 16:53:16.516-07:00 | 0.25 | 0x0000000000000003 | true |
| 07/23/2019 16:53:18.513-07:00 | 0.25 | 0x00000004 | false |
| 07/23/2019 16:53:20.526-07:00 | 0.0 | 0x00000005 | True |
| 07/23/2019 16:53:22.522-07:00 | 0.50 | 0x00000006 | False |
| 07/23/2019 16:53:24.519-07:00 | 0.5 | 0x00000007 | True |
| 07/23/2019 16:53:26.516-07:00 | 0.9999 | 0x00000008 | False |
+-------------------------------+-------------+--------------------+--------------+

我需要使用 pandas 库读取它并获取一个 DataFrame,其中除第一列之外的所有列都是 float 的。对于数字,这应该是自动的,但对于 HexPoint 和 BooleanPoint 等其他类型的输入,我需要提供一个转换函数将它们转换为数字。

在此示例中,HexPoint 值应转换为十进制,BooleanPoints 应将 True/true 转换为 1,将 False/false 转换为 0。

因此生成的 DataFrame 应如下所示:

+-------------------------------+-------------+----------+--------------+
| Timestamp | DoublePoint | HexPoint | BooleanPoint |
+-------------------------------+-------------+----------+--------------+
| 07/23/2019 16:53:12.523-07:00 | 0.0 | 1.0 | 1.0 |
| 07/23/2019 16:53:14.519-07:00 | 0.0 | 2.0 | 0.0 |
| 07/23/2019 16:53:16.516-07:00 | 0.25 | 3.0 | 1.0 |
| 07/23/2019 16:53:18.513-07:00 | 0.25 | 4.0 | 0.0 |
| 07/23/2019 16:53:20.526-07:00 | 0.0 | 5.0 | 1.0 |
| 07/23/2019 16:53:22.522-07:00 | 0.50 | 6.0 | 0.0 |
| 07/23/2019 16:53:24.519-07:00 | 0.5 | 7.0 | 1.0 |
| 07/23/2019 16:53:26.516-07:00 | 0.9999 | 8.0 | 0.0 |
+-------------------------------+-------------+----------+--------------+

重要注意事项:

  • 我事先并不知道 CSV 有多少列。
  • 我不知道 CSV 中的列是什么类型的数据。它们可以是 double 值、十六进制值和 bool 值的混合。
  • 唯一可以假设的是第一列名为“Timestamp”并包含时间戳。

有没有办法告诉 pandas 读取此 CSV 并尝试将所有列(第一列除外)转换为 float 。当它本身无法做到这一点时,运行一个自定义函数来获取该值并返回其数字表示形式,如上所述?

最佳答案

十六进制、 bool 值和 double 值(如表中存在的值)可以使用 Python 中的 float() 方法直接转换为 float 。

试试这个:

import pandas as pd

df = pd.read_csv("data.csv")

column_names = df.columns.tolist()
column_names.remove("Timestamp")

print(df)
print(df.dtypes)

print(type(df["DoublePoint"]))

for name in column_names:
try:
df[name] = df[name].astype(float)
except ValueError:
df[name] = df[name].apply(lambda x: float(int(x, 16)))

print(df)
print(df.dtypes)

此外,在您的输入 df 中,我看到 true/false 以小写形式存在于 2 个值中,我认为这是不正确的。如果正确,您需要将它们更改为 True/False ,就像其余值一样。

关于python - 使用转换函数将列值转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60175603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com