社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何根据python中其他列的单元格条件移动列的位置

user86907 • 3 年前 • 1165 次点击  

我需要一些python方面的帮助。以下是我想要实现的目标。

我有一个如下所示的数据集:

import pandas as pd



# define data
data = {'A': [55, "g", 35, 10,'pj'], 'B': [454, 27, 895, 3545,34], 
        'C': [4, 786, 7, 3, 896], 
        'Phone Number': [123456789, 7, 3456789012, 4567890123, 1],'another_col':[None,234567890,None,None,215478565]}
pd.DataFrame(data)

    A   B       C   Phone Number    another_col
0   55  454     4   123456789          None
1   g   27     786  7               234567890.0
2   35  895     7   3456789012         None
3   10  3545    3   4567890123         None
4   pj  34     896  1               215478565.0

我从pdf中提取了这些数据,不幸的是,它添加了一些随机字符串,如上图中的数据框所示。我想检查任何列中的任何单元格是否包含字符串或无数值。如果是,则删除该字符串并将整行向左移动。最后,所需的输出如下所示:

    A   B      C    Phone Number     another_col
0   55  454    4    1.234568e+08        None
1   27  786    7    2.345679e+08        None
2   35  895    7    3.456789e+09        None
3   10  3545   3    4.567890e+09        None
4   34  896    1    2.15478565+8        None

我非常感谢你的帮助。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131144
 
1165 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Scott Boston
Reply   •   1 楼
Scott Boston    3 年前

你可以创建布尔掩码, shift pd.concat :

m=pd.to_numeric(df['A'], errors='coerce').isna()
pd.concat([df.loc[~m], df.loc[m].shift(-1, axis=1)]).sort_index()

输出:

    A     B  C  Phone Number  another_col
0  55   454  4  1.234568e+08          NaN
1  27   786  7  2.345679e+08          NaN
2  35   895  7  3.456789e+09          NaN
3  10  3545  3  4.567890e+09          NaN
4  34   896  1  2.154786e+08          NaN
enke
Reply   •   2 楼
enke    3 年前

一种方法是使用 to_numeric 将每个值强制为数值,然后使用 dropna :

out = (df.apply(pd.to_numeric, errors='coerce')
       .apply(lambda x: pd.Series(x.dropna().tolist(), index=df.columns.drop('another_col')), axis=1))

输出:

      A       B    C  Phone Number
0  55.0   454.0  4.0  1.234568e+08
1  27.0   786.0  7.0  2.345679e+08
2  35.0   895.0  7.0  3.456789e+09
3  10.0  3545.0  3.0  4.567890e+09
4  34.0   896.0  1.0  2.154786e+08