使用python,打开此文件,读取文件中第2列和第三列的数据,并提取出来不重复的行,然后将其不重复的打印出第二列和第四列的数据
时间: 2024-09-29 11:11:59 浏览: 29
在Python中,你可以使用pandas库来轻松地完成这个任务。这里是一个简单的步骤指南:
```python
import pandas as pd
# 打开文件
file_path = 'your_file_path.csv' # 替换为你的文件路径
df = pd.read_csv(file_path)
# 提取第2列和第3列的数据(假设2列为索引列)
# 我们通常不直接操作原始数据的某一列作为索引,但在假设的情况下
# df = df[['Column2', 'Column3']] # Column2和Column3是你的列名
# 或者如果你的索引是连续的整数
# df = df.iloc[:, [1, 2]]
# 去除重复行
df_unique = df.drop_duplicates(subset=['Column2']) # 'Column2'替换为你的第2列的实际列名
# 打印第二列(即之前处理过的第2列)和第四列(假设第四列为第四列,如果不是请调整下标)
print(df_unique[['Column2', 'Fourth_Column']]) # Fourth_Column替换为你实际的第四列名
# 输出结果
```
请注意,你需要确保你的列名是准确的,并且根据实际情况可能需要调整`drop_duplicates`部分的`subset`参数。
相关问题
使用python,打开此excel文件,读取文件中第2列和第三列的字符串数据并比对,并提取出来2和3不重复的行,然后将其不重复的打印出第二列和第四列的数据
在Python中,我们可以使用pandas库来处理Excel文件,实现你的需求。以下是操作步骤:
```python
import pandas as pd
# 打开Excel文件
df = pd.read_excel('your_file.xlsx') # 将 'your_file.xlsx' 替换为实际的文件路径
# 选择第2列和第3列的字符串数据(假设第一列为0,第二列为1,以此类推)
col_2 = df.iloc[:, 1] # 第二列
col_3 = df.iloc[:, 2] # 第三列
# 创建一个新的DataFrame,只包含不重复的行
unique_rows = df.drop_duplicates(subset=[col_2.name, col_3.name]) # 注意这里需要调整列名,如果原列名为'Column1'、'Column2'
# 提取第二列和第四列(如果第四列存在的话),如果不存在则跳过
if 'Column4' in df.columns:
result = unique_rows[['Column2', 'Column4']] # 把'Column2'和'Column4'替换为实际的列名
else:
result = unique_rows[['Column2']]
# 打印结果
print(result)
```
写出python代码,用argparse。能在任何文件夹读取Log。具体如下: 1.读取log,当读取到最后一次出现"My name is kitty"时,从下一行开始读 2.删除所有重复的行,只留第一行 3.逐行写入csv 4.第1行按照正则规则1提取单词,然后分列,分列后才知道有多少列,分列符号也不知道有几个空格。 5.从第2行开始按照正则规则2分列后,才知道有多少列,分列符号也不知道有几个空格。 6.读取CSV文件Output 7.把标题行分为4类,第一类是标题为ABC,DFG的2列,第二类是CAT开头的几列,第三类是DOG开头的几列,第四类是Fish开头的几列 8.把4类标题画成4个曲线图,标注每条线的标题
以下是能够实现上述功能的 Python 代码:
```python
import argparse
import csv
import re
import matplotlib.pyplot as plt
# 定义 argparse
parser = argparse.ArgumentParser(description='Process log file and output csv file')
parser.add_argument('log_file', metavar='log_file', type=str,
help='path to log file')
parser.add_argument('csv_file', metavar='csv_file', type=str,
help='path to csv file')
args = parser.parse_args()
# 读取 log 文件
with open(args.log_file) as f:
lines = f.readlines()
# 找到最后一次出现 "My name is kitty" 的行
last_kitty_idx = None
for i, line in enumerate(lines):
if "My name is kitty" in line:
last_kitty_idx = i
# 从下一行开始读取
lines = lines[last_kitty_idx+1:]
# 删除所有重复的行,只留第一行
unique_lines = []
for line in lines:
if line not in unique_lines:
unique_lines.append(line)
# 写入 csv 文件
with open(args.csv_file, mode='w') as f:
writer = csv.writer(f)
# 第 1 行按照正则规则 1 提取单词,然后分列
headers = re.findall(r'\w+', unique_lines[0].strip())
writer.writerow(headers)
# 从第 2 行开始按照正则规则 2 分列
for line in unique_lines[1:]:
row = re.split(r'\s+', line.strip())
writer.writerow(row)
# 读取 csv 文件
with open(args.csv_file, mode='r') as f:
reader = csv.reader(f)
rows = [row for row in reader]
# 把标题行分为 4 类
abc_dfg_cols = []
cat_cols = []
dog_cols = []
fish_cols = []
for i, header in enumerate(rows[0]):
if header in ["ABC", "DFG"]:
abc_dfg_cols.append(i)
elif header.startswith("CAT"):
cat_cols.append(i)
elif header.startswith("DOG"):
dog_cols.append(i)
elif header.startswith("Fish"):
fish_cols.append(i)
# 把 4 类标题画成 4 个曲线图,标注每条线的标题
plt.figure(figsize=(10, 6))
for cols, title in [(abc_dfg_cols, "ABC/DFG"), (cat_cols, "CAT"), (dog_cols, "DOG"), (fish_cols, "Fish")]:
x = [row[0] for row in rows[1:]]
for col_idx in cols:
y = [float(row[col_idx]) for row in rows[1:]]
plt.plot(x, y, label=rows[0][col_idx])
plt.title(title)
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend()
plt.show()
```
阅读全文