Pandas: 将列转换为字符串不做特殊字符或引号处理

2024-10-03 09:10:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧resultstatsDF

resultstatsDF = DataFrame({'a': [1,2,3,4,5]})
resultstatsDF['file'] = 'asdf'
resultstatsDF.dtypes
a        int64
file    object
dtype: object

对于要转换为字符串的objectfile

我试过了

^{pr2}$

但不管我做什么,当我检查

resultstatsDF.dtypes

file保持为tpyeobject。在


Tags: 数据字符串dataframeobjectfiledtypeasdfdtypes
1条回答
网友
1楼 · 发布于 2024-10-03 09:10:41

stringdictlistdtype总是object,为了测试type,需要选择列的某个值,例如按^{}

type(resultstatsDF['file'].iat[0])

样品:

^{pr2}$

样品:

df = pd.DataFrame({'strings':['a','d','f'],
                   'dicts':[{'a':4}, {'c':8}, {'e':9}],
                   'lists':[[4,8],[7,8],[3]],
                   'tuples':[(4,8),(7,8),(3,)],
                   'sets':[set([1,8]), set([7,3]), set([0,1])] })

print (df)
      dicts   lists    sets strings  tuples
0  {'a': 4}  [4, 8]  {8, 1}       a  (4, 8)
1  {'c': 8}  [7, 8]  {3, 7}       d  (7, 8)
2  {'e': 9}     [3]  {0, 1}       f    (3,)

所有值都具有相同的^{}

print (df.dtypes)
dicts      object
lists      object
sets       object
strings    object
tuples     object
dtype: object

但是type不同,如果需要,请按循环检查:

for col in df:
    print (df[col].apply(type))

0    <class 'dict'>
1    <class 'dict'>
2    <class 'dict'>
Name: dicts, dtype: object
0    <class 'list'>
1    <class 'list'>
2    <class 'list'>
Name: lists, dtype: object
0    <class 'set'>
1    <class 'set'>
2    <class 'set'>
Name: sets, dtype: object
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
Name: strings, dtype: object
0    <class 'tuple'>
1    <class 'tuple'>
2    <class 'tuple'>
Name: tuples, dtype: object

或列的第一个值:

print (type(df['strings'].iat[0]))
<class 'str'>

print (type(df['dicts'].iat[0]))
<class 'dict'>

print (type(df['lists'].iat[0]))
<class 'list'>

print (type(df['tuples'].iat[0]))
<class 'tuple'>

print (type(df['sets'].iat[0]))
<class 'set'>

如果可能,使用^{}混合列(那么某些pandas函数可能会被破坏)可以按type进行筛选:

df = pd.DataFrame({'mixed':['3', 5, 9,'2']})
print (df)
  mixed
0     3
1     5
2     9
3     2

print (df.dtypes)
mixed    object
dtype: object

for col in df:
    print (df[col].apply(type))
0    <class 'str'>
1    <class 'int'>
2    <class 'int'>
3    <class 'str'>
Name: mixed, dtype: object

#python 3 - string
#python 2 - basestring
mask = df['mixed'].apply(lambda x: isinstance(x,str))
print (mask)
0     True
1    False
2    False
3     True
Name: mixed, dtype: bool

df = df[mask]
print (df)
  mixed
0     3
3     2

相关问题 更多 >