【问题标题】:Dataframe's column conversion from type object to int / float using Pandas Python使用 Pandas Python 将 Dataframe 的列从类型对象转换为 int / float
【发布时间】:2018-01-18 08:34:59
【问题描述】:

情景

我有 2 个 CSV 文件 (1) u.Data 和 (2) prediction_matrix,我需要将它们读取并写入一个单一数据帧,一旦完成,它将基于 int / float 进行聚类处理它将包含的值

问题

我已经完成了将 2 个 CSV 合并到 1 个名为 AllData.csv 的数据帧中,但是现在保存值的列类型具有不同的类型 (object),如如下所示(带有警告)

sys:1: DtypeWarning: Columns (0,1,2) have mixed types. Specify dtype option on import or set low_memory=False.
UDATA -------------
uid    int64
iid    int64
rat    int64
dtype: object
PRED_MATRIX -------
uid      int64
iid      int64
rat    float64
dtype: object
AllDATA -----------
uid    object
iid    object
rat    object
dtype: object

附:我知道如何使用low_memory=False,这只会抑制警告。

可能的原因

with open('AllData.csv', 'w') as handle:
    udata_df.to_csv(handle, index=False)
    pred_matrix.to_csv(handle, index=False)

因为,我需要将 2 个 CSV 写入单个 DF handle 对象,这可能会将所有值转换为它的类型。任何东西都可以保留应用相同逻辑的数据类型吗?

到目前为止所采取的无用参考:

  1. This one
  2. This two
  3. This too!

【问题讨论】:

  • 这是我想add AD_Matrix = AllData.drop_duplicates(subset=['uid','iid']) 的东西,所以我想这会删除标题。这是 o/p sys:1: DtypeWarning: Columns (0,1,2) have mixed types. Specify dtype option on import or set low_memory=False. UDATA ------------- uid int64 iid int64 rat int64 dtype: object PRED_MATRIX ------- uid int64 iid int64 rat float64 dtype: object AllDATA ----------- 196 object 242 object 3 object dtype: object @jezrael
  • 不,AllData.drop_duplicates(subset=['uid','iid']) 不删除标题,仅重复。

标签: python pandas csv types sklearn-pandas


【解决方案1】:

第二个DataFrame的标题也有问题,所以需要参数header=False

with open('AllData.csv', 'w') as handle:
    udata_df.to_csv(handle, index=False)
    pred_matrix.to_csv(handle, index=False, header=False)

另一种解决方案是mode=a 追加第二个DataFrame

f = 'AllData.csv'
udata_df.to_csv(f, index=False)
pred_matrix.to_csv(f,header=False, index=False, mode='a')

或者使用concat:

f = 'AllData.csv'
pd.concat([udata_df, pred_matrix]).to_csv(f, index=False)

示例

udata_df = pd.DataFrame({'uid':[1,2],
                         'iid':[8,9],
                         'rat':[0,3]})

pred_matrix = udata_df * 10

第三行是header:

with open('AllData.csv', 'w') as handle:
    udata_df.to_csv(handle, index=False)
    pred_matrix.to_csv(handle, index=False)

f = 'AllData.csv'
df = pd.read_csv(f)
print (df)
   iid  rat  uid
0    8    0    1
1    9    3    2
2  iid  rat  uid
3   80    0   10
4   90   30   20

在参数header=False之后它工作正常:

with open('AllData.csv', 'w') as handle:
    udata_df.to_csv(handle, index=False)
    pred_matrix.to_csv(handle, index=False, header=False)

f = 'AllData.csv'
df = pd.read_csv(f)
print (df)
   iid  rat  uid
0    8    0    1
1    9    3    2
2   80    0   10
3   90   30   20

模式append解决方案:

f = 'AllData.csv'
udata_df.to_csv(f, index=False)
pred_matrix.to_csv(f,header=False, index=False, mode='a')
df = pd.read_csv(f)
print (df)
   iid  rat  uid
0    8    0    1
1    9    3    2
2   80    0   10
3   90   30   20

concat解决方案:

f = 'AllData.csv'
pd.concat([udata_df, pred_matrix]).to_csv(f, index=False)
df = pd.read_csv(f)
print (df)
   iid  rat  uid
0    8    0    1
1    9    3    2
2   80    0   10
3   90   30   20

【讨论】:

  • 很好编译的问题耶!
【解决方案2】:

with open 方法在您的情况下是不必要的,因为您可以简单地连接两个矩阵,然后仅使用熊猫将其保存到 csv,如下所示:

df = pd.concat([udata_df, pred_matrix], axis=1) df.to_csv(encoding='utf-8')

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 2014-10-06
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多