以下代码:
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
和其他方法选项,但它没有用。
任何建议。
谢谢,
答案 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