隔离导入的 csv 文件中的浮点值并将其插入到 numpy 数组中

问题描述 投票:0回答:2

本质上,我有一个 CSV 文件,其中包含比较速度和经过时间(以秒为单位)的数据。当我使用 Python 将这个作为数据类型的 CSV 文件导入到 Google Colab 上时,它就是一个对象。

此外,该CSV文件是通过游戏Universe Sandbox 2获得的,其功能是在游戏过程中分析一段时间内的某些特征后,上传用户想要获取的数据的CSV文件。就我而言,它是速度与经过的时间。

我的目标是隔离该数据中包含的浮点数并将它们插入到 numpy 数组中以进行进一步的图形分析。

以下是我获取的数据的文本代码示例:

"#Universe Sandbox - 34.0.3"
"#Sim=Solar System"
"#NumItems=1,StartTime=0,EndTime=284569725.789386,TimeSpan=85536000"
"#Id=4,Name=Earth"
"TimePassed (year),Body.RelativeSpeed (km/s)"
"6.33101469304518,29.56082498805"
"6.37894990067948,29.4462248148605"
"6.42980290356108,29.3587977892391"
"6.47565397173302,29.3165767083232"

为了简单起见,我将按照评论的建议结束文本代码。

下面是我尝试实现的库,包括

pandas.to_numeric
apply()
astype(float)

import matplotlib.pyplot as plt
import numpy as np
import scipy as sc
import pandas as pd
import re
import csv

如果有人可以更详细地帮助我,那么我将不胜感激。在过去的 1 1/2 周里我一直坚持这个问题,没有进一步的相关改进。

python pandas csv type-conversion
2个回答
0
投票

跳过初始行,例如:

df = pd.read_csv('your file', skiprows=4)

您的数据屏幕建议列名称位于第 5 行 然后你需要转换数据:

df = pd.read_csv('your file', skiprows=4, names=['data']) # data are str so transform them    
df1 = pd.DataFrame(df['data'].apply(lambda x: x.split(',')).to_list(),columns=['x','y']).astype('float')
# split columns . make another df . convert data to float

更好的版本

df=pd.read_csv('your file', quoting=2,skiprows=4,names=['data'])
df1=df['data'].str.split(',', expand=True).astype('float64')
df1.columns=['x','y']

希望这有帮助


0
投票

不要进行后期处理。使用

read_csv
一次性完成此操作:

from io import StringIO

import csv
import pandas as pd

content = r'''"#Universe Sandbox - 34.0.3"
"#Sim=Solar System"
"#NumItems=1,StartTime=0,EndTime=284569725.789386,TimeSpan=85536000"
"#Id=4,Name=Earth"
"TimePassed (year),Body.RelativeSpeed (km/s)"
"6.33101469304518,29.56082498805"
"6.37894990067948,29.4462248148605"
"6.42980290356108,29.3587977892391"
"6.47565397173302,29.3165767083232"
'''
with StringIO(content) as f:
    # From now on, 'f' behaves like a file you'd have opened normally

    df = pd.read_csv(
        filepath_or_buffer=f,
        skiprows=4,
        sep=r'"|,',
        usecols=(1, 2),
    )
print(df)
© www.soinside.com 2019 - 2024. All rights reserved.