给定以下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,其中除第一列之外的所有列都是浮点数。对于数字,这应该是自动的,但是对于其他类型的输入(例如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并尝试将所有列(第一个列除外)转换为浮点型。而当它本身无法做到这一点时,运行一个自定义函数,该函数将采用值并返回如上所述的数字表示形式?
可以使用float()
python中的方法将十六进制,布尔值和双精度值(如表中存在的值)直接转换为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中,我看到在2个较小的值中存在true / false,我认为这是不正确的。如果正确,则需要将其更改True/False
为其余值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句