如何将数据框中的句点值替换为null或其他值?

时间:2016-12-26 21:11:17

标签: python pandas dataframe replace

以下代码:

print(PB_PID_group)
print(type(PB_PID_group))

告诉我:

PI
.             [., 5398, 5482, 5467]
1311    [5185, ., 5398, 5467, 5576]
1667                      [., 6446]
3352                            [.]
935                             [.]
Name: PID, dtype: object
<class 'pandas.core.series.Series'>

然后我将其更改为dataframe(pandas)

PB_PID_df = pd.DataFrame(PB_PID_group)

print(type(PB_PID_df))

给了我:

<class 'pandas.core.frame.DataFrame'>

然后我将数据帧写入文件:

pd.DataFrame.to_csv(PB_PID_df,'updated_df_table.txt', sep='\t', index=True, na_rep='none')

写道:

PI      PID
.       ['.' '5398' '5482' '5467']
1311    ['5185' '.' '5398' '5467' '5576']
1667    ['.' '6446']
3352    ['.']
935     ['.']

我想删除PI值为句点(。)的行,并仅从PID列中删除句点。

我试过了。

PB_PID_df['PID'] = PB_PID_df['PID'].replace(to_replace='.', value='na', regex=True)

我也试过没有regex和其他方法选项,但它没有用。

任何建议。

谢谢,

1 个答案:

答案 0 :(得分:1)

当您从现有系列制作数据框时,索引已被重复使用,因此要删除调用drop所需的初始行并传递该行'.'的标签。

由于您现在将列表作为奇怪的dtype,因此您无法再使用replace,因为这会查找要查找的确切值并且无法理解列表类型,因此您可以使用{ {1}}迭代测试每个值并替换为字符串apply

'na'

现在In [12]: # setup some data df = pd.DataFrame({'PID':[['.',5398, 5482, 5467], [5185, '.', 5398, 5467, 5576]]}, index=['.',1311]) df Out[12]: PID . [., 5398, 5482, 5467] 1311 [5185, ., 5398, 5467, 5576] 并使用drop替换apply和列表理解:

lambda

修改

要回答评论中的其他查询,要删除值,请修改列表理解,以便In [13]: df.drop('.',inplace=True) df['PID'] = df['PID'].apply(lambda x: [x if x != '.' else 'na' for x in x]) df Out[13]: PID 1311 [5185, na, 5398, 5467, 5576] 条件结束:

if