python - 如果这些行与熊猫中的头部不匹配,如何删除行?
问题描述
我正在尝试从一个非常大的文本文件中获取行,该文件与使用熊猫的头部具有相同的元素。例如。
假设我有一个如下的文本文件
a,b,c,d
1,2,3,4
5,6
7,8,9,10
其中 a、b、c 和 d 是头部。在这种情况下,我不知道第二行是来自 a 列还是 b 列还是 c 列还是 d 列。数字 6 之后也没有逗号。在读取 pandas 数据库时,有什么方法可以删除这些行吗?或者我应该在阅读之前删除这些行吗?
解决方案
我相信您可以使用read_csv
witherror_bad_lines=False
来省略具有更多元素(如标题DataFrame.dropna
)的行,并删除具有较少元素(如标题数量)的行:
df = pd.read_csv('file', error_bad_lines=False).dropna()
print (df)
a b c d
0 1 2 3.0 4.0
2 7 8 9.0 10.0
预处理解决方案 - 为每一行创建列表,使用标题长度测试长度并附加到列表列表,最后传递给DataFrame
构造函数:
缺点是所有值都是字符串,因此必须通过以下方式进行强制转换DataFrame.astype
:
import csv
out = []
with open('file.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
header = next(reader)
for row in reader:
if (len(row) == len(header)):
out.append(row)
df = pd.DataFrame(out, columns=header).astype(int)
print (df)
a b c d
0 1 2 3 4
1 7 8 9 10
或者创建具有其他长度的行列表,例如标题并传递给skiprows
参数:
omit = []
with open('file.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
header = next(reader)
for i, row in enumerate(reader, 1):
if (len(row) != len(header)):
omit.append(i)
df = pd.read_csv('file.csv', skiprows=omit)
print (df)
a b c d
0 1 2 3 4
1 7 8 9 10
推荐阅读
- python - 如何修复使用非元组序列进行多维索引的弃用警告
- c# - 序列图 UML 中的循环范围
- android - 在 Firebase 数据库查询 android 上使用 addChildEventListener
- python - python 3从json字典中获取特定值
- java - android片段使用onCreateView但不能添加firebase
- swift - 斯威夫特:对成员“地图”的模糊引用
- django - 如何基于 FK 进行查询?
- javascript - 当模式关闭时,如何停止播放嵌入的 iframe youtube 视频?
- arduino - 我的两个 nRF24 发生了一些奇怪的事情
- sql - 仅显示循环中的最高 alpha