我需要一些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

我非常感谢你的帮助.

推荐答案

一种方法是使用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

Python相关问答推荐

Python中的负前瞻性regex遇到麻烦

如何让 turtle 通过点击和拖动来绘制?

Select 用a和i标签包裹的复选框?

比较两个数据帧并并排附加结果(获取性能警告)

numba jitClass,记录类型为字符串

运行Python脚本时,用作命令行参数的SON文本

通过Selenium从页面获取所有H2元素

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

numpy卷积与有效

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何合并两个列表,并获得每个索引值最高的列表名称?

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

try 检索blob名称列表时出现错误填充错误""

Geopandas未返回正确的缓冲区(单位:米)

Python Pandas—时间序列—时间戳缺失时间精确在00:00

具有相同图例 colored颜色 和标签的堆叠子图

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

mdates定位器在图表中显示不存在的时间间隔

为什么在Python中00是一个有效的整数?

遍历列表列表,然后创建数据帧