使用 Python Pandas 从 CSV 文件中删除重复记录
Removing duplicate records from CSV file using Python Pandas
我想使用 Python Pandas 从 csv 文件中删除重复记录
CSV 包含具有三个属性 scale、minzoom、maxzoom 的记录。我想要一个带有 minzoom 和 maxzoom 的结果数据框,并且留下的记录是唯一的
即
输入 CSV 文件(lookup_scales.csv)
Scale, minzoom, maxzoom
2000, 0, 15
3000, 0, 15
10000, 8, 15
20000, 8, 15
200000, 15, 18
250000, 15, 18
需要 distinct_lookup_scales.csv(没有刻度列)
minzoom, maxzoom
0,5
8,15
15,18
到目前为止我的代码是
lookup_scales_df = pd.read_csv('C:/Marine/lookup/lookup_scales.csv', names = ['minzoom','maxzoom'])
lookup_scales_df = lookup_scales_df.set_index([2, 3])
file_name = "C:/Marine/lookup/distinct_lookup_scales.csv"
lookup_scales_df.groupby('minzoom', 'maxzoom').to_csv(file_name, sep=',')
非常感谢任何帮助。我是 pandas 的新手,正在使用 dataframe
您可以使用 pd.read_csv()
、pd.to_csv()
和 drop_duplicates()
:
import pandas as pd
df = pd.read_csv('test.csv', sep=', ', engine='python')
new_df = df[['minzoom','maxzoom']].drop_duplicates()
new_df.to_csv('out.csv', index=False)
输出到 out.csv
:
minzoom,maxzoom
0,15
8,15
15,18
在阅读 test.csv
时请注意 sep=', '
,否则您的列名称包含前导 space 如果保留默认值 sep=','
。
你不需要 numpy 或任何你可以在一行中进行唯一化的东西,同时使用 pandas:
导入 csv
import pandas as pd
df = pd.read_csv('lookup_scales.csv', usecols=['minzoom', 'maxzoom']).drop_duplicates(keep='first').reset_index()
输出:
minzoom maxzoom
0 0 15
1 8 15
2 15 18
然后将其写入 csv:
df.to_csv(file_name, index=False) # you don't need to set sep in this because to_csv makes it comma delimited.
所以整个代码:
import pandas as pd
df = pd.read_csv('lookup_scales.csv', usecols=['minzoom', 'maxzoom']).drop_duplicates(keep='first').reset_index()
file_name = "C:/Marine/lookup/distinct_lookup_scales.csv"
df.to_csv(file_name, index=False) # you don't need to set sep in this because to_csv makes it comma delimited.
d_kennetz 提供的答案是完全错误的。在保持其他列不变的情况下执行此操作的正确方法是替换 h
#df = pd.read_csv('yourcsvfilehere.csv').drop_duplicates('columnnamehere',keep='first')
我想使用 Python Pandas 从 csv 文件中删除重复记录 CSV 包含具有三个属性 scale、minzoom、maxzoom 的记录。我想要一个带有 minzoom 和 maxzoom 的结果数据框,并且留下的记录是唯一的
即
输入 CSV 文件(lookup_scales.csv)
Scale, minzoom, maxzoom
2000, 0, 15
3000, 0, 15
10000, 8, 15
20000, 8, 15
200000, 15, 18
250000, 15, 18
需要 distinct_lookup_scales.csv(没有刻度列)
minzoom, maxzoom
0,5
8,15
15,18
到目前为止我的代码是
lookup_scales_df = pd.read_csv('C:/Marine/lookup/lookup_scales.csv', names = ['minzoom','maxzoom'])
lookup_scales_df = lookup_scales_df.set_index([2, 3])
file_name = "C:/Marine/lookup/distinct_lookup_scales.csv"
lookup_scales_df.groupby('minzoom', 'maxzoom').to_csv(file_name, sep=',')
非常感谢任何帮助。我是 pandas 的新手,正在使用 dataframe
您可以使用 pd.read_csv()
、pd.to_csv()
和 drop_duplicates()
:
import pandas as pd
df = pd.read_csv('test.csv', sep=', ', engine='python')
new_df = df[['minzoom','maxzoom']].drop_duplicates()
new_df.to_csv('out.csv', index=False)
输出到 out.csv
:
minzoom,maxzoom
0,15
8,15
15,18
在阅读 test.csv
时请注意 sep=', '
,否则您的列名称包含前导 space 如果保留默认值 sep=','
。
你不需要 numpy 或任何你可以在一行中进行唯一化的东西,同时使用 pandas:
导入 csvimport pandas as pd
df = pd.read_csv('lookup_scales.csv', usecols=['minzoom', 'maxzoom']).drop_duplicates(keep='first').reset_index()
输出:
minzoom maxzoom
0 0 15
1 8 15
2 15 18
然后将其写入 csv:
df.to_csv(file_name, index=False) # you don't need to set sep in this because to_csv makes it comma delimited.
所以整个代码:
import pandas as pd
df = pd.read_csv('lookup_scales.csv', usecols=['minzoom', 'maxzoom']).drop_duplicates(keep='first').reset_index()
file_name = "C:/Marine/lookup/distinct_lookup_scales.csv"
df.to_csv(file_name, index=False) # you don't need to set sep in this because to_csv makes it comma delimited.
d_kennetz 提供的答案是完全错误的。在保持其他列不变的情况下执行此操作的正确方法是替换 h
#df = pd.read_csv('yourcsvfilehere.csv').drop_duplicates('columnnamehere',keep='first')