Python 计算具有相同值的行数,即24mil行
所以我有一个巨大的CSV,我制作了一个测试脚本来查看行数,它返回大约2400万行。我想提取具有相同CIK编号的行数,并在单独的CSV中传输该数据 因此,另一个文件中需要的输出是: CIK编号:具有该CIK编号的IP编号 我有一些想法,但效率不够,所以脚本没用,因为它需要很长时间才能通过csv。有没有人遇到了和我类似的问题 如果我用熊猫来做这个,任何建议都会有很大的帮助 CSV的示例:Python 计算具有相同值的行数,即24mil行,python,python-3.x,pandas,csv,Python,Python 3.x,Pandas,Csv,所以我有一个巨大的CSV,我制作了一个测试脚本来查看行数,它返回大约2400万行。我想提取具有相同CIK编号的行数,并在单独的CSV中传输该数据 因此,另一个文件中需要的输出是: CIK编号:具有该CIK编号的IP编号 我有一些想法,但效率不够,所以脚本没用,因为它需要很长时间才能通过csv。有没有人遇到了和我类似的问题 如果我用熊猫来做这个,任何建议都会有很大的帮助 CSV的示例: 您可以使用pandas来groupby查看CIK列,然后使用size()获取CIK值的总数 比如说, impor
您可以使用
pandas
来groupby
查看CIK
列,然后使用size()
获取CIK
值的总数
比如说,
import pandas as pd
df = pd.read_csv('name.csv')
ndf = df.groupby('CIK').size()
ndf.to_csv("CIK_number.csv")
我想我可能误解了你想要的结果。如果您想要CIK,IP对按CIK出现的次数,请执行以下操作:
df = pd.DataFrame({'CIK': ['102', '102', '103', '103', '104'], 'IP':['103.92.134', '103.92.134', '103.92.135', '103.92.136', '105.32.134'], 'C1': [1, 2, 3, 4,5 ], 'C2':[1,0,0,1,0]})
ndf = df.groupby(['CIK','IP'])['CIK'].size().reset_index()
ndf.rename(columns={0: 'count'}, inplace=True)
### returns
CIK IP count
0 102 103.92.134 2
1 103 103.92.135 1
2 103 103.92.136 1
3 104 105.32.134 1
在pandas
do中读取大型CSV文件
chunks = []
for chunk in pd.read_csv('csv_name.csv', chunksize = 100):
chunks.append(chunk)
df = pd.concat(chunks)
您可以使用
pandas
来groupby
查看CIK
列,然后使用size()
获取CIK
值的总数
比如说,
import pandas as pd
df = pd.read_csv('name.csv')
ndf = df.groupby('CIK').size()
ndf.to_csv("CIK_number.csv")
我想我可能误解了你想要的结果。如果您想要CIK,IP对按CIK出现的次数,请执行以下操作:
df = pd.DataFrame({'CIK': ['102', '102', '103', '103', '104'], 'IP':['103.92.134', '103.92.134', '103.92.135', '103.92.136', '105.32.134'], 'C1': [1, 2, 3, 4,5 ], 'C2':[1,0,0,1,0]})
ndf = df.groupby(['CIK','IP'])['CIK'].size().reset_index()
ndf.rename(columns={0: 'count'}, inplace=True)
### returns
CIK IP count
0 102 103.92.134 2
1 103 103.92.135 1
2 103 103.92.136 1
3 104 105.32.134 1
在pandas
do中读取大型CSV文件
chunks = []
for chunk in pd.read_csv('csv_name.csv', chunksize = 100):
chunks.append(chunk)
df = pd.concat(chunks)
您可以使用熊猫,但效率不高:
import pandas
df = pandas.read_csv('my.csv')
但快速而肮脏的方法是简单地流式传输文件,并使用简单的字符串匹配进行拉取,然后编写新文件:
with open("my.csv") as infile:
for line in infile:
if "CIK_number" in line :
do_something_with(line)
您可以使用熊猫,但效率不高:
import pandas
df = pandas.read_csv('my.csv')
但快速而肮脏的方法是简单地流式传输文件,并使用简单的字符串匹配进行拉取,然后编写新文件:
with open("my.csv") as infile:
for line in infile:
if "CIK_number" in line :
do_something_with(line)
用柜台怎么样
导入集合,csv
将open(“big.csv”)作为csvfile:
计数器=collections.counter(csv.DictReader(csvfile)中的行[“cik”]
以open(“out.csv”、“w”)作为输出文件:
writer=csv.writer(输出文件)
writer.writerow((“cik”、“count”))
对于cik,在计数器中计数。项()
writer.writerow((cik,count))
内存开销将取决于有多少个CIK,而不是多少行。我不知道有多少,所以我不知道这是否会成为一个问题。使用计数器怎么样
导入集合,csv
将open(“big.csv”)作为csvfile:
计数器=collections.counter(csv.DictReader(csvfile)中的行[“cik”]
以open(“out.csv”、“w”)作为输出文件:
writer=csv.writer(输出文件)
writer.writerow((“cik”、“count”))
对于cik,在计数器中计数。项()
writer.writerow((cik,count))
内存开销将取决于有多少个CIK,而不是多少行。我不知道有多少只,所以我不知道这是否会成为一个问题。我对熊猫不太熟悉,但会试用你的熊猫solution@Stefan我可能误解了你想要的结果。检查我的编辑是否符合您的要求。要在
pandas
中读取大型CSV,您可以使用chunksize
参数,然后连接较小的数据帧。我尝试了您过去的解决方案@HS nebula,但我的脚本崩溃了,也许它不能处理这么大的文件?还有关于输出的问题:CIK号码:带有该CIK号码的IP号码我对熊猫不太熟悉,但会试用你的solution@Stefan我可能误解了你想要的结果。检查我的编辑是否符合您的要求。要在pandas
中读取大型CSV,您可以使用chunksize
参数,然后连接较小的数据帧。我尝试了您过去的解决方案@HS nebula,但我的脚本崩溃了,也许它不能处理这么大的文件?还有关于输出的问题:CIK number:使用CIK numberpython的csv读卡器的IP数也可以,但是如果你只是在制作精确的文件,也许你不需要它?我猜我假设你不想在内存中存储大对象,所以你想要一个简单的流。你不理解我的问题,我不想输入一个特定的cik。我想让脚本为csv中的每个IP提取多少IP具有相同的CIK,但是csv的大小是个问题……如果流式传输每一行,大小并不重要。它不会在内存中加载完整的文件。python的csv阅读器也很好,但是如果你只是在制作精确的文件,也许你不需要它?我猜我假设你不想在内存中存储大对象,所以你想要一个简单的流。你不理解我的问题,我不想输入一个特定的cik。我想让脚本为csv中的每个IP提取多少IP具有相同的CIK,但是csv的大小是个问题……如果流式传输每一行,大小并不重要。它不会在内存中加载完整的文件。这是一个很好的答案。您还可以轻松地将结果逐行写入csv文件,这也应该很快。@brunns我已经尝试过使用Collection/Counter,但代码有一些问题,可能是我的错误实现。它可以工作,但完成date和cik大约需要9分钟。我不知道熊猫会更快吗?对不起,我不是熊猫用户。也许可以,但我帮不了你。我刚刚给了你一个我能想到的最好的解决方案,那就是纯蟒蛇。@HS星云,在我们之间,你最熟悉熊猫,你能回答我之前的问题吗?@Stefan我的意思是,在熊猫身上做这件事的方法在我的回答中给出了。您可能可以使用csv
模块将文件读入列表列表,然后将其转换为数据帧。这可能会加快加载文件的速度。不过,我不确定groupby
会比这个答案快。这是个好答案。您还可以轻松地将结果逐行写入csv文件,这也应该很快。@brunns我已经尝试过使用Collection/Counter,但代码有一些问题,可能是我的错误实现。信息技术