Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算具有相同值的行数,即24mil行_Python_Python 3.x_Pandas_Csv - Fatal编程技术网

Python 计算具有相同值的行数,即24mil行

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

所以我有一个巨大的CSV,我制作了一个测试脚本来查看行数,它返回大约2400万行。我想提取具有相同CIK编号的行数,并在单独的CSV中传输该数据

因此,另一个文件中需要的输出是:

CIK编号:具有该CIK编号的IP编号

我有一些想法,但效率不够,所以脚本没用,因为它需要很长时间才能通过csv。有没有人遇到了和我类似的问题

如果我用熊猫来做这个,任何建议都会有很大的帮助

CSV的示例:


您可以使用
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,但代码有一些问题,可能是我的错误实现。信息技术