在下面的ipython3会话中,我读取了不同格式的表,并在其中一列中找到了值的总和:
In [278]: F = pd.read_table("../RNA_Seq_analyses/mapping_worm_number_tests/hisat2/mapped_C_elegans/feature_count/W100_1_on_C_elegans/protein_coding_fwd_counts.txt", skip
...: rows=2, usecols=[6]).sum()
In [279]: S = pd.read_table("../RNA_Seq_analyses/mapping_worm_number_tests/hisat2/mapped_C_elegans/intersect_count/W100_1_on_C_elegans/protein_coding_fwd_counts.txt", us
...: ecols=[6], header=None).sum()
In [280]: S
Out[280]:
6 3551266
dtype: int64
In [281]: F
Out[281]:
72 3164181
dtype: int64
In [282]: type(F)
Out[282]: pandas.core.series.Series
In [283]: type(S)
Out[283]: pandas.core.series.Series
In [284]: F[0]
Out[284]: 3164181
In [285]: S[0]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-285-5a4339994a41> in <module>()
----> 1 S[0]
/home/bli/.local/lib/python3.6/site-packages/pandas/core/series.py in __getitem__(self, key)
601 result = self.index.get_value(self, key)
602
--> 603 if not is_scalar(result):
604 if is_list_like(result) and not isinstance(result, Series):
605
/home/bli/.local/lib/python3.6/site-packages/pandas/indexes/base.py in get_value(self, series, key)
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3323)()
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3026)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4009)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8146)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8090)()
KeyError: 0
F
和S
对象如果来自类似操作(sum
)并且属于同一类型(pandas.core.series.Series
),会有不同的行为吗
提取我想要的值(列的总和)的正确方法是什么?
In [297]: F["72"]
Out[297]: 3164181
In [298]: S["6"]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4009)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8125)()
TypeError: an integer is required
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-298-0127424036a0> in <module>()
----> 1 S["6"]
/home/bli/.local/lib/python3.6/site-packages/pandas/core/series.py in __getitem__(self, key)
601 result = self.index.get_value(self, key)
602
--> 603 if not is_scalar(result):
604 if is_list_like(result) and not isinstance(result, Series):
605
/home/bli/.local/lib/python3.6/site-packages/pandas/indexes/base.py in get_value(self, series, key)
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3323)()
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3026)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4075)()
KeyError: '6'
进一步调查:
In [306]: print(S.index)
Int64Index([6], dtype='int64')
In [307]: print(F.index)
Index(['72'], dtype='object')
In [308]: S[6]
Out[308]: 3551266
所以这两个对象最终有不同类型的索引。这种行为让我想起了R ......
似乎header=None
导致列数为S
的数字索引,而缺少header=None
和skiprows=2
导致索引是根据读取的数据生成的第三排。 (这揭示了我在pandas中解析数据的方式中的一个错误......)
答案 0 :(得分:3)
我认为你需要:
source_folder= DriveApp.getFolderById('YourFolderID1')
dest_folder=DriveApp.getFolderById('YourFolderID2')
var files = source_folder.getFilesByName("YourFileName").next();
dest_folder.addFile(files);
source_folder.removeFile(files);
或者:
#select first value of one element series
f = F.iat[0]
#alternative
#f = F.iloc[0]
或者:
#convert to numpy array and select first value
f = F.values[0]
我认为你得到错误,因为没有索引值f = F.item()
。
正如IanS所评论的应该按索引值0
和6
选择:
72
样品:
f = F[72]
#f = f.loc[72]
s = S[6]
#s = S.loc[6]
KeyError:0
您在F = pd.Series([3164181], index=[72])
f = F[72]
print (f)
3164181
print (F.index)
Int64Index([72], dtype='int64')
print (F.index.tolist())
[72]
f = F[0]
print (f)
中获得一个整数索引,因为参数S
- pandas添加默认索引(header=None
)。对于0,1,...
使用名为F
的{{1}}列 - 它是字符串。有区别。
答案 1 :(得分:0)
我认为问题是您需要定义每个文件的分隔符。否则,read_table将读取一行作为列。
尝试以下方法: pd.read_table(filename,sep =&#34;;&#34;,usecols = [6])。sum()