【问题标题】:reading dataframe from csv and array problems从 csv 和数组问题中读取数据帧
【发布时间】:2022-11-18 04:10:08
【问题描述】:

我使用的应用程序在数据框中生成数据,我需要根据请求使用这些数据。

它看起来与此类似。

<class 'pandas.core.frame.DataFrame'>
             E         Gg        gnx2    J chs lwave J_ID
0    27.572025  82.308581    7.078391  3.0   1   [0]    1
1    46.387728  77.029548   58.112338  3.0   1   [0]    1
2    75.007554  82.087407    0.535442  3.0   1   [0]    1

一切都很完美,而我之前没有尝试使用保存在单独文件中的数据框。因为当我在加载后尝试使用数据时 - 我收到有关包含数组的列的数据类型的错误。 (例如 lvawe)是一个数组,当保存在 csv 中时,有关数据类型的信息会丢失。

#saving the data to csv
csv_filename = "ladder.csv"
ladder.to_csv(csv_filename)

因此,下次加载数据框以使用数据时,我无法像应该的那样访问数组元素。

因为据我了解,此列中的数据像字符串一样加载。 通过 load_csv 加载数据后,我得到了以下数据类型:

Unnamed: 0      int64
E             float64
Gg            float64
gnx2          float64
J             float64
chs             int64
lwave          object
J_ID            int64
dtype: object

我该如何解决这个问题?如何使用正确的数据类型正确加载数据,或者在加载后如何将数据类型显式分配给列?

【问题讨论】:

    标签: python arrays dataframe


    【解决方案1】:

    read_csv 函数中,您可以手动为新列分配数据类型。传入列名字典 --> 首选数据类型。

    data_type_mapping = {‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’}
    my_df = pd.read_csv('myfile.csv', dtypes = data_type_mapping)
    

    来自pandasdocumentation

    数据或列的数据类型。例如。 {‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’} 将 str 或 object 与合适的 na_values 设置一起使用以保留而不解释 dtype。如果指定了转换器,它们将被应用而不是 dtype 转换。

    【讨论】:

    • 你好,谢谢你的回复。这似乎是正确的,但我不知道如何在我的案例中应用它。下面列出了我尝试过的代码。
    • 试图使用这个,@StonedTensor, data_type_mapping = {... 'lwave': np.ndarray, 'J_ID': np.int64 } filename = isotope_name + '_Emin_10_Emax_1000_2022.10.30_ladder.csv' resonance_ladder = pd.read_csv(filename , dtype = data_type_mapping) 但我有错误:TypeError: dtype '<class 'numpy.ndarray'>' not understanded 我不知道我需要使用哪个 dtype..
    • lwave 应该是什么样子的例子?它的类型是什么你最初保存数据框?
    • 抱歉,我对 stackoverflow 的理解不好 :) 我不知道如何在 cmets 中添加代码或标记。这是 lwave 列 [1.0, 1.0] 中的数据示例
    • 保存前的数据类型如下所示: print(resonance_ladder.dtypes) E object ... chs object lwave object J_ID object dtype: object
    【解决方案2】:

    问题已通过使用 json.loads 功能解决。

    #modifying the ladder using json
    
    modified = ladder_df.lwave.apply(json.loads)
    ladder_df['lwave'] = modified
    

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2012-10-22
      相关资源
      最近更新 更多